读书时间 2011/10/22

15 篇文章 0 订阅

《Windows程序设计》V2


1. Chap 4 Windows图形界面

* FirstWindow破坏实验

删去::RegisterClassEx(),Error”创建窗口出错“

删去::DispatchMessage(),所有消息都不再响应

删去::ShowWindow(),没有窗口显示

 

《把脉VC++》

1. Chap 10. 界面绘制与交互

*一个Fake的消息系统

写得非常好,简单易懂。

 

* 一切都是消息

Bool SetWindowText(HWND hWnd, LPCSTR lpString)

其实就是向hwnd发送一个WM_SETTEXT消息

SendMessage((HWND) hWnd, WM_SETTEXT, (WPARM) wParm, (LPARAM) lParam) ;

 

Spy++观察进程、线程及窗口之间的关系

Q:消息queue是每个线程一个还是每个窗口一个???GetMessage()???

 

《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()先执行,初始化过程中,会对模块与线程状态等变量进行初始化,这些初始化的状态信息放在THREAD-LOCAL中,同一线程的其它任何程序都可以访问到。

CWinApp::CWinApp()
{
    // 初始化CWinThread状态
    AFX_MODULE_STATE* pModuleState = AfxGetModuleState();
    AFX_MODULE_THREAD_STATE* pThreadState = pModuleState->m_thread;
    ASSERT(AfxGetThread() == NULL);
    pThreadState->m_pCurrentWinThread = this;
    ASSERT(AfxGetThread() == this);
    m_hThread = ::GetCurrentThread();
    m_nThreadID = ::GetCurrentThreadId();

    // 初始化CWinApp状态
    ASSERT(pModuleState->m_pCurrentWinApp == NULL);
    pModuleState->m_pCurrentWinApp = this;
    ASSERT(AfxGetApp() == this);

    // 直到进入WinMain函数之后再设置为运行状态
    m_hInstance = NULL;
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值