不要用DoModal,用ShowDialogue即可

解决方案 »

  1.   

    #include "stdafx.h"
    #include "resource.h"#define MAX_LOADSTRING 100// Global Variables:
    HINSTANCE hInst; // current instance
    TCHAR szTitle[MAX_LOADSTRING]; // The title bar text
    TCHAR szWindowClass[MAX_LOADSTRING]; // The title bar text
    HWND hdlg; //define a global HWND variable for modeless dialog
    // Foward declarations of functions included in this code module:
    ATOM MyRegisterClass(HINSTANCE hInstance);
    BOOL InitInstance(HINSTANCE, int);
    LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
    int __stdcall ModelessDlgFunc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);//modeless dialog functionint APIENTRY WinMain(HINSTANCE hInstance,
                         HINSTANCE hPrevInstance,
                         LPSTR     lpCmdLine,
                         int       nCmdShow)
    {
    MSG msg;
    HACCEL hAccelTable; // Initialize global strings
    LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
    LoadString(hInstance, IDC_MODELESSDLG, szWindowClass, MAX_LOADSTRING);
    MyRegisterClass(hInstance); // Perform application initialization:
    if (!InitInstance (hInstance, nCmdShow)) 
    {
    return FALSE;
    } hAccelTable = LoadAccelerators(hInstance, (LPCTSTR)IDC_MODELESSDLG); // Main message loop:
    while (GetMessage(&msg, NULL, 0, 0)) 
    {
    if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg)&&!IsDialogMessage(hdlg,&msg)) 
    {
    TranslateMessage(&msg);
    DispatchMessage(&msg);
    }
    }
    return msg.wParam;
    }ATOM MyRegisterClass(HINSTANCE hInstance)
    {
    WNDCLASSEX wcex; wcex.cbSize = sizeof(WNDCLASSEX);  wcex.style = CS_HREDRAW | CS_VREDRAW;
    wcex.lpfnWndProc = (WNDPROC)WndProc;
    wcex.cbClsExtra = 0;
    wcex.cbWndExtra = 0;
    wcex.hInstance = hInstance;
    wcex.hIcon = LoadIcon(hInstance, (LPCTSTR)IDI_MODELESSDLG);
    wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
    wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
    wcex.lpszMenuName = (LPCSTR)IDC_MODELESSDLG;
    wcex.lpszClassName = szWindowClass;
    wcex.hIconSm = LoadIcon(wcex.hInstance, (LPCTSTR)IDI_SMALL); return RegisterClassEx(&wcex);
    }BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
    {
       HWND hWnd;   hInst = hInstance; // Store instance handle in our global variable   hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
          CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);
    hdlg=CreateDialogParam(hInst,MAKEINTRESOURCE(IDD_DIALOG1),hWnd,ModelessDlgFunc,0);   if (!hWnd)
       {
          return FALSE;
       }
       ShowWindow(hWnd, nCmdShow);
       UpdateWindow(hWnd);   return TRUE;
    }
    int __stdcall ModelessDlgFunc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
    {
    switch (message)
    {
    case WM_INITDIALOG:
    return TRUE; case WM_COMMAND:
    switch(LOWORD(wParam))
    {
    case IDOK:
    MessageBox(hDlg,"Modeless dialog","Message",MB_OK);
    break;
    case IDCANCEL:
    ShowWindow(hdlg,SW_HIDE);
    break;
    default:
    break;
    }
    break;
    }
        return FALSE;
    }LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
    int wmId, wmEvent;
    PAINTSTRUCT ps;
    HDC hdc;
    TCHAR szHello[MAX_LOADSTRING];
    LoadString(hInst, IDS_HELLO, szHello, MAX_LOADSTRING);


    switch (message) 
    {
    case WM_COMMAND:
    wmId    = LOWORD(wParam); 
    wmEvent = HIWORD(wParam); 
    // Parse the menu selections:
    switch (wmId)
    {
    case IDM_EXIT:
    DestroyWindow(hdlg);//destroy the modeless dialog
       DestroyWindow(hWnd);
       break;
    case ID_FUNCTION_OPENDLG:
    ShowWindow(hdlg,SW_SHOW);
    break;
    case ID_FUNCTION_HIDEDLG:
    ShowWindow(hdlg,SW_HIDE);
    break;
    default:
       return DefWindowProc(hWnd, message, wParam, lParam);
    }
    break;
    case WM_PAINT:
    hdc = BeginPaint(hWnd, &ps);
    // TODO: Add any drawing code here...
    RECT rt;
    GetClientRect(hWnd, &rt);
    DrawText(hdc, szHello, strlen(szHello), &rt, DT_CENTER);
    EndPaint(hWnd, &ps);
    break;
    case WM_DESTROY:
    PostQuitMessage(0);
    break;
    default:
    return DefWindowProc(hWnd, message, wParam, lParam);
       }
       return 0;
    }
      

  2.   

    HWND CreateDialog(
      HINSTANCE hInstance,  // handle to module
      LPCTSTR lpTemplate,   // dialog box template name
      HWND hWndParent,      // handle to owner window
      DLGPROC lpDialogFunc  // dialog box procedure
    );
    then 
    SHowWindow();