学了一段时间的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.   

    {
        static BOOL       fFlipFlop = FALSE ;
    2点:
    1.是静态的。
    2.只在函数内可见。
      

  2.   

    1、窗口过程是通过消息驱动,你单调试的话,系统会调用WM_PAINT消息,因为窗体被重绘了,所以就会一直在循环里,建议需要什么消息就断在什么消息里。要不WM_PAINT消息会一直被调用。
    2、static BOOL       fFlipFlop = FALSE ;//是静态变量,只初始化一次所以它不是总是False。
      

  3.   

    static BOOL       fFlipFlop = FALSE ;
    =========================
    静态变量只有第一次才初始化,不过别的局部变量会每次都初始化.1、我总想单步跟进窗口过程查看消息处理过程,怎知道单步跟踪只能停留在消息循环中请问原因。我自己的解释:窗口过程是系统来调用的,所以不在程序的运行流程中。是否正确请指教。
    ==============================
    窗口过程还是在程序的线程中运行的,之所以出现你所说的问题,原因上面也说了,要调试的话,下断点吧