MFC 完全自定义控件
头文件
- #pragma once
- #include "pch.h"
- class CGridCtrl : public CWnd
- {
- public:
- void Create(CWnd* pParent, DWORD dwStyle, RECT rect, UINT nId);
- void InsertColumn(LPCTSTR lpstColName);
- void InsertRow();
- void Set(int Row, int Col, CString data)
- {
- while (vctRows[Row].size() < Col)
- {
- vctRows[Row].push_back(_T(""));
- }
- vctRows[Row].push_back(data);
- }
- LPCTSTR GetClassName() {
- return _T("GridCtrl");
- }
- LPCTSTR GetWindowName() {
- return _T("GridCtrl");
- }
- afx_msg void OnPaint();
- DECLARE_MESSAGE_MAP()
- private:
- void RegisterCtrl();
- //void(int nRow,int nCol);
- void InsertCol(LPCTSTR lpctRow);
- std::vector<LPCTSTR> GetRows();
- static bool m_bRegisted;
- static LRESULT GridCtrlProc(HWND, UINT, WPARAM, LPARAM);
- typedef std::vector<CString> Cells;
- std::vector<Cells> vctRows;
- int m_nCurRow;
- };
cpp
- #include "pch.h"
- #include "CGridCtrl.h"
- bool CGridCtrl::m_bRegisted = false;
- BEGIN_MESSAGE_MAP(CGridCtrl, CWnd)
- ON_WM_PAINT()
- END_MESSAGE_MAP()
- void CGridCtrl::Create(CWnd* pParent, DWORD dwStyle, RECT rect, UINT nID)
- {
- WNDCLASS windowclass;
- HINSTANCE hInst = AfxGetInstanceHandle();
- if (!::GetClassInfo(hInst, GetClassName(), &windowclass))
- {
- RegisterCtrl();
- }
- CWnd::Create(GetClassName(), GetWindowName(), dwStyle, rect, pParent, nID);
- }
- void CGridCtrl::InsertColumn(LPCTSTR lpstColName)
- {
- if (vctRows.size() >= 1)
- (vctRows.end() - 1)->push_back(lpstColName);
- }
- void CGridCtrl::InsertRow()
- {
- Cells cells;
- vctRows.push_back(cells);
- }
- void CGridCtrl::OnPaint()
- {
- CWnd::OnPaint();
- CClientDC dc(this);
- CRect cr;
- GetClientRect(&cr);
- dc.Draw3dRect(0, 0, cr.Width(), cr.Height(), RGB(233, 0, 0), RGB(0, 233, 0));
- int nRowHeight = 30;
- int nColWidth = 150;
- cr.SetRect(0, 0, nColWidth, nRowHeight);
- for (int nRow = 0; nRow < vctRows.size(); nRow++)
- {
- for (int nCol = 0; nCol < vctRows[nRow].size(); nCol++)
- {
- int nCoordX = nCol * nColWidth;
- int nCoordY = nRow * nRowHeight;
- cr.MoveToXY(nCoordX, nCoordY);
- //dc.Draw3dRect(nCoordX, nCoordY, nColWidth, nRowHeight, RGB(12, 0, 3), RGB(32, 22, 12));
- CString ss;
- ss = vctRows[nRow][nCol];
- dc.DrawText(vctRows[nRow][nCol], cr, DT_CENTER);
- }
- }
- }
- void CGridCtrl::InsertCol(LPCTSTR lpctRow)
- {
- m_nCurRow = vctRows.size();
- }
- void CGridCtrl::RegisterCtrl()
- {
- WNDCLASS w;
- memset(&w, 0, sizeof(WNDCLASS)); // start with NULL defaults
- w.style = CS_DBLCLKS | CS_HREDRAW | CS_VREDRAW;
- w.lpszClassName = GetClassName();
- w.hCursor = AfxGetApp()->LoadStandardCursor(IDC_ARROW);
- w.hIcon = NULL;//GetIcon(FALSE);
- w.hInstance = AfxGetInstanceHandle();
- w.lpszMenuName = NULL;//_T("Menu");
- w.cbClsExtra = w.cbWndExtra = 0;
- w.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);//::GetSysColor(COLOR_WINDOW);
- w.lpfnWndProc = (WNDPROC)AfxWndProc;//::DefWindowProc;//(WNDPROC)CGridCtrl::GridCtrlProc;
- if (!AfxRegisterClass(&w))
- {
- AfxThrowResourceException();
- return;
- }
- }
- LRESULT CGridCtrl::GridCtrlProc(HWND hWnd, UINT msgType, WPARAM wParam, LPARAM lParam)
- {
- return AfxWndProc(hWnd, msgType, wParam, lParam);
- }
MFC 完全自定义控件的更多相关文章
- MFC 自定义控件
需要在MFC实现自定义控件功能,网上搜集找的如下方法实现: 以下是步骤说明. 一.自定义一个空白控件 1.先创建一个MFC工程 NEW Project-->MFC-->MFC Appli ...
- MFC可编辑ListBox控件CEditableListBox
左击选中单元格,右击进入编辑状态. MFC自定义控件的添加方法C#自定义控件编译后就自动出现在工具箱里.MFC的自定义控件需要先拖个基类到对话框上,然后添加一个控件变量.再修改源代码中的控件名为扩展控 ...
- MFC如何添加自定义控件
project->add to project->components and controls在Registered ActiveX Controls下找到你注册的自定义控件就可以了 ...
- MFC自定义控件如何向父窗口发送自定义消息
自定义了一个控件 class CHtmlEditCtrlEx : public CHtmlEditCtrl 想在这个控件接收到Ctrl+V键盘消息的时候,向该控件所在的窗口发送一个自定义消息.具体 ...
- 2013 duilib入门简明教程 -- 结合win32和MFC (16)
虽然duilib自带在MFC中使用duilib的Demo,但只是MFC窗口和duilib窗口不重叠的情况.如果要在MFC窗口中嵌入duilib控件,或者在duilib控件中嵌入MFC的控件的话 ...
- 第二十八篇:SOUI中自定义控件开发过程
在SOUI中已经提供了大部分常用的控件,但是内置控件不可能满足用户的所有要求,因此一个真实的应用少不得还要做一些自定义控件. 学习一个新东西,最简单的办法就是依葫芦画瓢.事实上在SOUI系统中内置控件 ...
- 快笑死,侯捷研究MFC的原因
与我研究VCL框架代码的原因一模一样:就是N年了,感觉自己还是没有掌握Delphi,惊叹别人各种各样神奇的效果,自己却不会,更不知为什么这样做,离高手的距离还有十万八千里.而且编程的时候,就像侯捷说的 ...
- MFC双缓冲和裁剪问题导致闪烁
问题描述: 应用场景:在对话框中,自定义一个MFC图形控件(为了描述方便,暂定为HSPaintControl),控件覆盖整个对话框的客户区,属于最底层的控件,在这之上放置了很多其他的小图形控件. 问题 ...
- MFC 对话框不显示,返回-1 原因
DoModal失败原因 1.MFC 通常对话框不显示的原因有 1 父窗口HWND无效 2 在ONINITDIALOG里用了ENDDIALOG 3 无效的对话框资源ID 4 使用没有注册的的自定义控件 ...
- MFC中的一些视图
本章主要介绍MFC中主要的视图类,这些继承自Cview类. 继承关系如上图所示. 滚动视图 CscrollView给Cview添加了基本的滚动功能,它包含WM_VSCROLL和WM_HSCROLL消息 ...
随机推荐
- Swoole 源码分析之 Timer 定时器模块
原文首发链接:Swoole 源码分析之 Timer 定时器模块 大家好,我是码农先森. 引言 Swoole 中的毫秒精度的定时器.底层基于 epoll_wait 和 setitimer 实现,数据结构 ...
- es 排序突然很慢的原因
今天突然之间发现一个访问es的查询很慢.由刚上线之前测试的100ms直接到了5s左右.瞬间懵逼. 这个用户索引大概200w的数据. 查询语句如下 GET /user/_search{"fro ...
- Android 13 - Media框架(6)- NuPlayer
关注公众号免费阅读全文,进入音视频开发技术分享群! 上一节我们通过 NuPlayerDriver 了解了 NuPlayer 的使用方式,这一节我们一起来学习 NuPlayer 的部分实现细节. ps: ...
- Android 13 - Media框架 - 异步消息机制
关注公众号免费阅读全文,进入音视频开发技术分享群! b7693967-317e-4c46-96d3-d40d9d87e382 由于网上已经有许多优秀的博文讲解了Android的异步消息机制(ALoop ...
- WPF 制作高性能的透明背景异形窗口(使用 WindowChrome 而不要使用 AllowsTransparency=True)
在 WPF 中,如果想做一个背景透明的异形窗口,基本上都要设置 WindowStyle="None".AllowsTransparency="True" 这两个 ...
- (性能测试)--记录一次高可用场景导致CPU资源升高
测试场景:高可用场景--限流测试: 被测交易:查询类交易,HTTP协议: 交易链路:jmeter - web - coimpre(前置服务) -- coimbp -- cobp (coimbp .co ...
- js浮点数类型
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8 ...
- minos 1.2 内存虚拟化——guest
首发公号:Rand_cs minos 1.2 内存虚拟化--guest 项目来自乐敏大佬:https://github.com/minosproject/minos 本文继续讲述 minos 中的内存 ...
- 架构与思维:了解Http 和 Https的区别(图文详解)
1 介绍 随着 HTTPS 的不断普及和使用成本的下降,现阶段大部分的系统都已经开始用上 HTTPS 协议. HTTPS 与 HTTP 相比, 主打的就是安全概念,相关的知识如 SSL .非对称加密. ...
- nginx虚拟主机实战
基于nginx部署网站 虚拟主机指的就是一个独立的站点,具有独立的域名,有完整的www服务,例如网站.FTP.邮件等. Nginx支持多虚拟主机,在一台机器上可以运行完全独立的多个站点. 一.为什么配 ...