MFC里一些类似于On*()的函数都是怎么触发的,有否有个例子,可发邮件[email protected] MFC里一些类似于On*()的函数都是怎么触发的,有否有个例子,可发邮件[email protected] 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 一般都是windows消息触发的,详情可见深入浅出MFC On*()的函数都是消息的响应函数。比如你定义了一个按钮,使用下面的宏告诉编程框架什么时机调用此函数。BEGIN_MESSAGE_MAP(CtestDlg, CDialog) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() //}}AFX_MSG_MAP ON_BN_CLICKED(IDC_BUTTON1, OnBnClickedButton1)END_MESSAGE_MAP()ON_BN_CLICKED(IDC_BUTTON1, OnBnClickedButton1)这句话的意思就是IDC_BUTTON1按下时调用OnBnClickedButton1函数。 消息触发。。LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam){ switch (message) { case WM_COMMAND: wmId = LOWORD(wParam); wmEvent = HIWORD(wParam); switch (wmId) { case IDC_OK: OnOK(); default: return DefWindowProc(hWnd, message, wParam, lParam); } break; case WM_CREATE: OnCreate(); break; case WM_INITDIALOG: OnInitDialog(); break; MFC里的消息映射我知道的,只是我想要的是原始的win32程序, to cxz1985: 这种用法我知道,但有一个问题: 就是如果你本身写的类用在了MFC下,而派生于其类的函数又该如何触发呢 也就是说怎样让你写的这种带有On*()函数的类通用地发生一些触发呢? to id27145: 关键是基类是一个独立的东西,可以被放在任意工程下,比如: 它可以被放在MFC工程,也可以放在WIN32工程 现在的问题是,被移动后,基类该怎么改写呢,如何使其通用呢 原来模拟mfc做过类似的功能简单说,mfc创建一个链表,每个消息函数都有一个记录,并且真个表可以贯通父类到子类。所以,只要一个for循环,遍历链表,找到对应的,调用函数就行了。楼主可以看看MFC源码,就能发现下面的东西隐藏的真正内容。DECLARE_MESSAGE_MAPBEGIN_MESSAGE_MAPEND_MESSAGE_MAP 你建立一个不带MFC的“Hello,World”就可以看到是消息调度函数触发的,后面的调用Proc如四楼所示 那基类里可否有宏用来说明MFC还是WIN32WIN32里应该只能写在WndProc里,而MFC里是消息映射两个要通用。。 看起来蛮难在基类里用像MFC的消息映射数组来定义可能行得通 ONMOUSEMOVE 不停的触发 vista下加载activex的问题 急急急急急急急!!我做了一程序需要在出错的时候,自己杀死自己,可以吗?? 关于显卡输出的问题 Data Time Picker为什么不能显示当前时间?很奇怪!在线等 谁能告诉我msafd.dll有什么用? 使用winpcap能够实现ip的拦截么?(急,谢谢) 请问,哪个地方可下载到InstallShield Professional 5.1软件? GetTextExtentPoint32函数是干什么用的啊? ****** odbc动态配置***** 多分辨率图像拼接 如何写一个仿word界面的程序
比如你定义了一个按钮,使用下面的宏告诉编程框架什么时机调用此函数。BEGIN_MESSAGE_MAP(CtestDlg, CDialog)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
//}}AFX_MSG_MAP
ON_BN_CLICKED(IDC_BUTTON1, OnBnClickedButton1)
END_MESSAGE_MAP()ON_BN_CLICKED(IDC_BUTTON1, OnBnClickedButton1)
这句话的意思就是IDC_BUTTON1按下时调用OnBnClickedButton1函数。
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_COMMAND:
wmId = LOWORD(wParam);
wmEvent = HIWORD(wParam);
switch (wmId)
{
case IDC_OK:
OnOK();
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
break;
case WM_CREATE: OnCreate();
break; case WM_INITDIALOG:
OnInitDialog();
break;
这种用法我知道,但有一个问题:
就是如果你本身写的类用在了MFC下,而派生于其类的函数又该如何触发呢
也就是说怎样让你写的这种带有On*()函数的类通用地发生一些触发呢?
关键是基类是一个独立的东西,可以被放在任意工程下,比如:
它可以被放在MFC工程,也可以放在WIN32工程
现在的问题是,被移动后,基类该怎么改写呢,如何使其通用呢
简单说,mfc创建一个链表,每个消息函数都有一个记录,并且真个表可以贯通父类到子类。
所以,只要一个for循环,遍历链表,找到对应的,调用函数就行了。楼主可以看看MFC源码,就能发现下面的东西隐藏的真正内容。DECLARE_MESSAGE_MAPBEGIN_MESSAGE_MAP
END_MESSAGE_MAP
WIN32里应该只能写在WndProc里,而MFC里是消息映射
两个要通用。。 看起来蛮难
在基类里用像MFC的消息映射数组来定义可能行得通