WndProc()回调函数的返回值

刚学了WndProc(),就遇到一个大问题,

LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam){
        HDC hdc;
        switch(message){
        case WM_LBUTTONDOWN:
                static int x,y; 
                HPEN pen;
        x=LOWORD(lParam); 
        y=HIWORD(lParam); 
                hdc=GetDC(hwnd);
                MoveToEx(hdc,x,y,NULL);
                LineTo(hdc,x,y);       
                pen=(HPEN)GetStockObject(BLACK_PEN); 
        SelectObject(hdc,pen);                         
                LineTo(hdc,x,y); 
        DeleteObject(pen); 
               ReleaseDC(hwnd,hdc);
        break;
   
    case WM_CLOSE: 
        if(IDYES==MessageBox(hwnd,"确定退出吗?","确认!",MB_YESNO)) 
          { 
          DestroyWindow(hwnd); 
          } ;
         break; 
        case WM_DESTROY: 
     PostQuitMessage(0);
    break;         
        default:
    DefWindowProc(hwnd, message, wParam, lParam);
        break;
        }
        MessageBox(NULL,"完成","确认!",MB_YESNO);
        return message;
}
这段代码很奇怪。。。。
如果回调函数返回接收到的message的话,那么MessageBox会一直重复,这应该没有什么问题,但是如果return 0的话,MessageBox只会运行三次(至少在我的机子上,我用了VC6和VS2012,都是这个问题),还有如果不在倒数第6段DefWindowProc(hwnd, message, wParam, lParam);前加上return ,把DefWindowProc()产生的值return的话,return message才能看到窗口,return 0就不行(这有什么关系??)
最可恨的是直线绘制也不能用,WM_CLOSE时YES NO都退出不了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值