读书时间 2011/10/25
来源:互联网 发布:linux开机启动程序 编辑:程序博客网 时间:2024/05/21 08:57
《Windows Programming》V2
1. Chap 5, 框架
* _asm {int 3}只在debug状态下工作?
* 窗口handler与CWnd针针的映射
线程中每一个窗口都对应一个CWnd类指针
窗口函数通过hWnd得到CWnd指针,再调用相应方法完成功能
Q:HANDLE就是一种指针,YES。如模块HANDLE就是模块代码的首地址。
* CWinApp/CWinThread
任何程序必须定义一个CWinApp子类的全局变量,使CWinApp:CWinApp()能首先执行,完成初始化动作 。
系统中无需再定义WinMain()函数,此函数已经在CWinApp中实现了。
注:CWinApp初始化比WinMain()先执行。
2. Chap 6, 窗口
* 消息映射宏
enum AfxSig // 函数签名标识
{
AfxSig_end = 0, // 结尾标识
AfxSig_vv, // void (void),比如,void OnPaint()函数
AfxSig_vw, // void (UINT),比如,void OnTimer(UINT nIDEvent)函数
AfxSig_is, // int (LPTSTR),比如,BOOL OnCreate(LPCREATESTRUCT)函数
};
注:除了需要消息处理函数地址外,还需要知道函数的签名方式,以便正确调用相关函数。
* CWnd::WindowProc()
LRESULT CWnd::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
LRESULT lResult;
if(!OnWndMsg(message, wParam, lParam, &lResult))
lResult = DefWindowProc(message, wParam, lParam);
return lResult;
}
* CWnd::OnWndMsg()
BOOL CWnd::OnWndMsg(UINT message, WPARAM wParam, LPARAM lParam, LRESULT* pResult)
{
LRESULT lResult = 0;
// 将命令消息和通知消息交给指定的函数处理
if(message == WM_COMMAND)
{
if(OnCommand(wParam, lParam))
{
lResult = 1;
goto LReturnTrue;
}
return FALSE;
}
if(message == WM_NOTIFY)
{
NMHDR* pHeader = (NMHDR*)lParam;
if(pHeader->hwndFrom != NULL && OnNotify(wParam, lParam, &lResult))
goto LReturnTrue;
return FALSE;
}
....
// 处理其它消息类型
// 在各类的消息映射表中查找合适的消息处理函数,找到的话就调用它
const AFX_MSGMAP* pMessageMap;
const AFX_MSGMAP_ENTRY* lpEntry;
for(pMessageMap = GetMessageMap(); pMessageMap != NULL; pMessageMap = pMessageMap->pBaseMap)
{
ASSERT(pMessageMap != pMessageMap->pBaseMap);
if((lpEntry = AfxFindMessageEntry(pMessageMap->pEntries, message, 0, 0)) != NULL)
goto LDispatch;
}
}
注1:WM_COMMAND, WM_NOTIFY是作为特殊message来处理的,其它都视同普通消息。
注2:整个系统中只有一个函数在处理消息,就是CWnd::OnWndMsg(),但是,所有类的消息映射不同,所以会有不同的行为。
注3:整个系统只有一个窗口类,对应一个窗口函数AfxWndProc()。
《把脉VC++》
1. Chap 10. 界面
* MFC处理的消息种类
WM_XXX(WM_COMMAND)除外,一般在CWnd中处理
WM_COMMAND,所有菜单、按钮、工具栏上发出的消息,通常和用户界面上的功能有关
控件通知消息:子窗口送给主窗口的WM_COMMAND通知消息???
2. 消息映射
* 避免switch,提供了自定义可能性
*几种不同的映射宏
ON_WM_XXX
ON_COMMAND
ON_CONTROL
ON_MESSAGE:自定义消息
- 读书时间 2011/10/25
- 读书时间 2011/10/16
- 读书时间 2011/10/22
- 读书时间 2011/10/23
- 读书时间 2011/11/16 读书时间
- 读书时间 2011/12/25 iPhone/iPad
- 读书时间 2011/10/04 网络
- 读书时间 2011/10/06 网络
- 读书时间 2011/10/07 网络
- 读书时间 05/29/2011
- 读书时间 2011/11/13
- 读书时间 2011/11/15
- 读书时间 2011/11/17
- 读书时间 2011/11/20
- 读书时间 2011/12/28
- 读书时间 05/25/2011 Linux C/C++ 孤儿进程
- 读书时间2011/06/25 - 1 iPhone/iPad相关
- 读书时间
- python windows钩子
- php文件上传功能
- 浅谈HTTP中Get与Post的区别
- drupal 环境搭建
- 我眼中的云--什么是云
- 读书时间 2011/10/25
- ASCII码排序
- Binary String Matching
- 会场安排问题
- 排序各种方法汇总!
- 会场安排问题
- 喷水装置(一)
- 喷水装置(一)
- 奇偶数分离