Win32程序窗口过程

窗口过程
       每一个窗口必须有一个窗口过程(window procedure)。窗口过程的名字是用户定义的。示例程序对主窗口使用下面的窗口过程:

LRESULT WINAPI MainWndProc( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);

       因为窗口过程必须由标准的调用规范来声明,所以要是WINAPI标识符。
       窗口过程从系统接收消息,这些消息必须是输入消息或者是窗口控制消息。你可以在你的窗口过程中有选择的处理一个消息,或者通过调用DefWindowPro函数把消息传递给系统默认处理。示例程序利用switch语句处理的消息有WM_PAINT,WM_COMMAND和WM_DESTROY,结构如下:


      switch( uMsg ) {
                case WM_PAINT:
                         ...
                case WM_COMMAND:
                         ...
               case WM_DESTROY:
                         ...
              default:
                       return( DefWindowProc( hWnd, msg, wParam, lParam ));
              }

 

        WM_PAINT消息表明你应该重绘应用程序的全部或部分。利用BeginPaint函数得到一个DC句柄,然后在应用程序窗口内用DC对象绘图,例如你可以使用TextOut函数。利用EndPaint函数释放DC句柄。示例程序用以下的代码在窗口中显示了一个文本字符串:

 

    case WM_PAINT:
      hDC = BeginPaint( hWnd, &ps );

      TextOut( hDC, 10, 10, "Hello, World!", 13 );

      EndPaint( hWnd, &ps );
      break;

       WM_COMMAND消息表明用户从菜单项目当中选择了一个命令。示例程序用一下的代码去检查About的菜单项目是否被选择:

        case WM_COMMAND:
                 switch( wParam ) {
                           case IDM_ABOUT:
                                    ...
                                    break;
                            }

        大多数的窗口过程处理WM_DESTROY消息。在销毁窗口后,系统会立即把这条消息传递给窗口过程。这条消息给了你机会完成处理过程,并在应用程序消息队列中发布一条WM_QUIT的消息。
    示例程序处理WM_DESTROY消息的过程如下:
   
    case WM_DESTROY:
         PostQuitMessage( 0 );
         break;


       

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值