学了一段时间的windows程序了,刚开始的那种不适应感渐渐消退。程序也慢慢能看懂了。只是如今对窗口处理过程还有点问题:
1、我总想单步跟进窗口过程查看消息处理过程,怎知道单步跟踪只能停留在消息循环中请问原因。我自己的解释:窗口过程是系统来调用的,所以不在程序的运行流程中。是否正确请指教。2、接上,系统每次调用窗口处理过程,每次是否都要初始化在里面声明的变量?如下列代码,是从《windows程序设计》中抽出来的,计时器一节。该回调函数处理计时器消息:VOID CALLBACK TimerProc (HWND hwnd, UINT message, UINT iTimerID, DWORD dwTime){ static BOOL fFlipFlop = FALSE ; HBRUSH hBrush ; HDC hdc ; RECT rc ; MessageBeep (MB_ICONASTERISK) ; fFlipFlop = !fFlipFlop ; //翻转BOOL变量 GetClientRect (hwnd, &rc) ; hdc = GetDC (hwnd) ; hBrush = CreateSolidBrush (fFlipFlop ? RGB(255,0,0) : RGB(0,0,255)) ; FillRect (hdc, &rc, hBrush) ; ReleaseDC (hwnd, hdc) ; DeleteObject (hBrush) ;}每次调用这个函数,变量fFlipFlop都要初始化为FALSE?
1、我总想单步跟进窗口过程查看消息处理过程,怎知道单步跟踪只能停留在消息循环中请问原因。我自己的解释:窗口过程是系统来调用的,所以不在程序的运行流程中。是否正确请指教。2、接上,系统每次调用窗口处理过程,每次是否都要初始化在里面声明的变量?如下列代码,是从《windows程序设计》中抽出来的,计时器一节。该回调函数处理计时器消息:VOID CALLBACK TimerProc (HWND hwnd, UINT message, UINT iTimerID, DWORD dwTime){ static BOOL fFlipFlop = FALSE ; HBRUSH hBrush ; HDC hdc ; RECT rc ; MessageBeep (MB_ICONASTERISK) ; fFlipFlop = !fFlipFlop ; //翻转BOOL变量 GetClientRect (hwnd, &rc) ; hdc = GetDC (hwnd) ; hBrush = CreateSolidBrush (fFlipFlop ? RGB(255,0,0) : RGB(0,0,255)) ; FillRect (hdc, &rc, hBrush) ; ReleaseDC (hwnd, hdc) ; DeleteObject (hBrush) ;}每次调用这个函数,变量fFlipFlop都要初始化为FALSE?
解决方案 »
- 请问如何实现如图所示的界面,是用CListCtrl吗?
- UDP发送延时?
- 有十个文件名,还有一个文件夹,我要比较这个文件夹下的文件与这十个文件名有无不同文件,有的话MessageBox出文件夹下的文件名,怎么做?
- 在一个基于SDI的应用程序中,如何实现用户登录对话框,就是用户输入密码后才能进入主界面,请问应把代码加在哪里,应该加什么代码?谢谢
- 如何检测是否已安装modem
- 怎么实现一个Csatic类型的数组m_Image[16]与16个picture控件关联?
- 请问哪位知道WORD2000的文件格式,谢谢
- 如何设置combo box的值
- ultra edit回车无法下一行
- 如何做一个批处理文件呀?
- vc2008无法下断点。
- 请问大侠一个线程的问题
static BOOL fFlipFlop = FALSE ;
2点:
1.是静态的。
2.只在函数内可见。
2、static BOOL fFlipFlop = FALSE ;//是静态变量,只初始化一次所以它不是总是False。
=========================
静态变量只有第一次才初始化,不过别的局部变量会每次都初始化.1、我总想单步跟进窗口过程查看消息处理过程,怎知道单步跟踪只能停留在消息循环中请问原因。我自己的解释:窗口过程是系统来调用的,所以不在程序的运行流程中。是否正确请指教。
==============================
窗口过程还是在程序的线程中运行的,之所以出现你所说的问题,原因上面也说了,要调试的话,下断点吧