打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Custom Control
userphoto

2012.06.15

关注
Custom Control

一、注册Custom Control类

要使用Custom Control,必须把Custom Control的Class属性设置为一个窗口类,这个窗口类可以VC的类,例如:Button、Edit。
在窗体上拉个Custom Control,设置ID为IDC_EDIT,Class为Edit。在头文件增加一个CEdit类的成员变量:CEdit m_Text;
然后在OnInitDialog()中使用SubclassDlgItem把IDC_EDIT和对话框连接起来:
m_Text.SubclassDlgItem(IDC_EDIT,this);
m_Text.SetWindowText("Custom Control例子");

也可以把Custom Control设置为一个自定义类。
使用RegisterClass注册自定义类,然后设置Custom Control的Class属性为该类就行了,参考注册自定义类的代码:
BOOL CMyCtrl::RegisterWndClass(HINSTANCE hInstance)
{
WNDCLASS wc;
wc.lpszClassName = "CMyCtrl"; // 自定义类名
wc.hInstance = hInstance;
wc.lpfnWndProc = ::DefWindowProc;
wc.hCursor = ::LoadCursor(NULL, IDC_ARROW);
wc.hIcon = 0;
wc.lpszMenuName = NULL;
wc.hbrBackground = (HBRUSH) ::GetStockObject(LTGRAY_BRUSH);
wc.style = CS_GLOBALCLASS;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;

// 注册自定义类
return (::RegisterClass(&wc) != 0);
}

二、映射自定义消息

这里只介绍Custom Control向父窗口发送WM_NOTIFY消息,然后映射到操作函数。
在自定义操作类里增加一个Login()成员函数,当主程序调用这个成员函数后,会触发LoginEvent事件。
Login()的实现代码:
BOOL CMyCtrl::Login()
{
AfxMessageBox("主程序调用Login,将触发LoginEvent事件!");

NMHDR nm;
// 设置消息代码
nm.code = 12345;
nm.hwndFrom =m_hWnd;
nm.idFrom = GetDlgCtrlID();

// 发父窗口发送WM_NOTIFY消息
CWnd* pParent = GetParent();
pParent->SendMessage(WM_NOTIFY,nm.idFrom, (LPARAM)&nm);

return true;
}

在主窗体的头文件里声明消息响应函数:
afx_msg void LoginEvent;
在BEGIN_MESSAGE_MAP里加上:
ON_NOTIFY(12345, IDC_CUSTOM1, LoginEvent)
12345:消息代码;
IDC_CUSTOM1:控件的ID
LoginEvent:映射的函数。

然后再实现LoginEvent()的代码:
void CMainDlg::LoginEvent()
{
AfxMessageBox("触发LoginEvent事件!");
}
也可以在主窗体的OnNotify里处理WM_NOTIFY消息。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
用Windows API实现一个简单的文本输入框
socket WSAAsyncSelect编程模型(非常好的例子)
Win32编程基础知识_天空总是蓝色的
用Win32 application建立窗体_入门
WinCE OpenGL绘制立方体和纹理贴图 .
Windows应用程序基础知识 - 笔记 - 吴锦华 - CSDN学生大本营 - Powe...
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服