分享

Custom Control

 Sky-Cool 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消息。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多