部分代码如下:
case WM_CLOSE:
if (IDYES==MessageBox(hwnd,"是否真的关闭?","weixin",MB_YESNO))
{
DestroyWindow(hwnd);
}
break;
case WM_DESTROY:
        PostQuitMessage(0);
break;
那儿错了?

解决方案 »

  1.   

    试了一下, 没什么问题.
    源程序如下:sample.c
    //----------------------------------------------------
    #include <windows.h>
    #include "resource.h"LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
    TCHAR szClassName[] = TEXT("Leaf");
    HINSTANCE hInst;int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPreInst, LPSTR lpszCmdLine, int nCmdShow)
    {
      HWND hWnd;
      MSG msg;
      WNDCLASS myProg;
      if (!hPreInst)
      {
        myProg.style = CS_HREDRAW | CS_VREDRAW;
        myProg.lpfnWndProc = WndProc;
        myProg.cbClsExtra = 0;
        myProg.cbWndExtra = 0;
        myProg.hInstance = hInstance;
        myProg.hIcon = NULL;
        myProg.hCursor = LoadCursor(NULL, IDC_ARROW);
        myProg.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
        myProg.lpszMenuName = MAKEINTRESOURCE(IDR_MENU1);
        myProg.lpszClassName = szClassName;    if (!RegisterClass(&myProg)) 
          return FALSE;
      }
      hInst = hInstance;
      hWnd = CreateWindow(szClassName,
        szClassName,
        WS_OVERLAPPEDWINDOW,
        CW_USEDEFAULT,
        CW_USEDEFAULT,
        CW_USEDEFAULT,
        CW_USEDEFAULT,
        NULL,
        NULL,
        hInstance,
        NULL);
      ShowWindow(hWnd, nCmdShow);
      UpdateWindow(hWnd);
      while (GetMessage(&msg, NULL, 0, 0))
      {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
      }
      return (msg.wParam);
    }LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
    {
    static HMENU hMenu;
      switch (msg)
      {
      case WM_CREATE:
      hMenu = LoadMenu(hInst, MAKEINTRESOURCE(IDR_MENU1));
      hMenu = GetSubMenu(hMenu, 0);
      return 0;
      case WM_COMMAND:
      switch (LOWORD(wParam))
      {
      case ID_FILE_MESSAGE:
    if (IDYES==MessageBox(hWnd, TEXT("是否真的关闭?"), TEXT("weixin"),MB_YESNO))
    {
    DestroyWindow(hWnd);
    }
      break;
      }
      break;
      case WM_DESTROY:
        PostQuitMessage(0);
        break;
      default:
        return (DefWindowProc(hWnd, msg, wParam, lParam));
      }
      return (0L);
    }
    *.rc 资源文件如下
    //----------------------------------------------------// Microsoft Visual C++ generated resource script.
    //
    #include "resource.h"#define APSTUDIO_READONLY_SYMBOLS
    /////////////////////////////////////////////////////////////////////////////
    //
    // Generated from the TEXTINCLUDE 2 resource.
    //
    #include "afxres.h"/////////////////////////////////////////////////////////////////////////////
    #undef APSTUDIO_READONLY_SYMBOLS/////////////////////////////////////////////////////////////////////////////
    // 中文(中华人民共和国) resources#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_CHS)
    #ifdef _WIN32
    LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED
    #pragma code_page(936)
    #endif //_WIN32#ifdef APSTUDIO_INVOKED
    /////////////////////////////////////////////////////////////////////////////
    //
    // TEXTINCLUDE
    //1 TEXTINCLUDE 
    BEGIN
        "resource.h\0"
    END2 TEXTINCLUDE 
    BEGIN
        "#include ""afxres.h""\r\n"
        "\0"
    END3 TEXTINCLUDE 
    BEGIN
        "\r\n"
        "\0"
    END#endif    // APSTUDIO_INVOKED
    /////////////////////////////////////////////////////////////////////////////
    //
    // Menu
    //IDR_MENU1 MENU 
    BEGIN
        POPUP "&File"
        BEGIN
            MENUITEM "&Message",                    ID_FILE_MESSAGE
        END
    END#endif    // 中文(中华人民共和国) resources
    /////////////////////////////////////////////////////////////////////////////#ifndef APSTUDIO_INVOKED
    /////////////////////////////////////////////////////////////////////////////
    //
    // Generated from the TEXTINCLUDE 3 resource.
    //
    /////////////////////////////////////////////////////////////////////////////
    #endif    // not APSTUDIO_INVOKED
      

  2.   

    我自己的代码中是while (GetMessage(&msg, hwnd, 0, 0)),就出现窗口销毁,程序关不了
    改成while (GetMessage(&msg, NULL, 0, 0))就对了
    请问是怎么回事?