我有一个基于对话框的程序,对话框上面有一个button,
当点击这个button后执行PostMessage(WM_CLOSE),可是
窗口不但不能关掉,而且还出现错误,错误发生在:
LRESULT CWnd::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
// OnWndMsg does most of the work, except for DefWindowProc call
LRESULT lResult = 0;
if (!OnWndMsg(message, wParam, lParam, &lResult))
lResult = DefWindowProc(message, wParam, lParam);
return lResult;//这里返回值为0,
}
最后返回值为0,也就是说这个消息没有被handled.
问题:请问各位大虾为什么会产生这种错误?可能的原因由那些?

解决方案 »

  1.   

    为什么要这样使用呢,直接使用button调用cwnd的close函数不是更容易吗?
      

  2.   


    当点击这个button后使用OnOK()多省事啊?
      

  3.   

    对了,还有更奇怪的是:在Debug版里没问题,但是Release版就有问题。
      

  4.   

    就怕在Debug版里没问题,但是Release版就有问题!!这个难整!
      

  5.   

    楼上两位大虾:
    不管是Close还是OnOK结果都一样,因为这两个函数最后还是要发一个WM_CLOSE消息。现在的问题是:为什么这个WM_CLOSE消息不能被handled?
      

  6.   

    返回0也有可能是DefWindowProc(message, wParam, lParam)返回了0呀
      

  7.   

    zhdleo,是啊。debug版还可以调试,Release就只有瞪眼了.....:(
      

  8.   

    SnowTopch,
    不好意思,写错了。
    是OnWndMsg返回0。
      

  9.   

    我认为 Koshima (RedApple)  是想问PostMessage该如何使用的问题吧
      

  10.   

    LRESULT CWnd::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
    {
    // OnWndMsg does most of the work, except for DefWindowProc call
    LRESULT lResult = 0;
    if (!OnWndMsg(message, wParam, lParam, &lResult))
    lResult = DefWindowProc(message, wParam, lParam);
    return lResult;//这里返回值为0,
    }
    你这个是重载的吗?
    我没有重载这个debug 和release下工作正常
      

  11.   

    dan_sapphire(天下),
    你真是天才,既然如此那就请你解释一下PostMessage的用法好了,不过我不给你分。:)
      

  12.   

    LRESULT CWnd::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
    {
    // OnWndMsg does most of the work, except for DefWindowProc call
    LRESULT lResult = 0;
    if (!OnWndMsg(message, wParam, lParam, &lResult))
    lResult = DefWindowProc(message, wParam, lParam);
    return lResult;//这里返回值为0,
    }
    我用了你这段代码,没有出现你的问题阿