如何在Dilog对话框中按一个button键产生一个简单的Dialog对话框?

解决方案 »

  1.   

    CDialog MyDialog;
    MyDialog.DoModal();
      

  2.   

    不完全正确.那样只可以创建一个模态对话框.
    如果要创建一个非模态的对话框要调用xx.creat()函数.
    -----------
    2者前提都是你要先创建一个对话框资源
    ----------------------------
    模态对话框--->这样的对话框出现后,你不点上面的按钮或进行其他的操作让它关闭的话,你就没有办法在原来的对话框上进行操作.
    非模态对话框---->2个对话框可以共存,2着者之间互相不影响,你可以随时对其中一个进行操作而不要关闭其中一个.
      

  3.   

    CDialog MyDialog;
    MyDialog.DoModal();
      

  4.   

    有两种方式:
    1)模式对话框:
         CMyDialog MyDialog;
         MyDialog.DoModal();
    2)无模式对话框:
         CMyDialog* MyDialog;
         MyDialog = new CMyDialog;
         ASSERT_VALID(MyDialog);
         bResult = MyDialog->Create(IDD_DIALOG_MyDialog);
         MyDialog->ShowWindow(TRUE);
      

  5.   

    如果用MFC就按楼上的做法。
    如果要用SDK作,就比较麻烦.如下:
    ABOUT1.C
            
    /*------------------------------------------------------------------------
            
      ABOUT1.C -- About Box Demo Program No. 1
            
                                                     (c) Charles Petzold, 1998
            
    -------------------------------------------------------------------------*/
            
    #include <windows.h>
            
    #include "resource.h"
            LRESULT     CALLBACK WndProc                     (HWND, UINT, WPARAM, LPARAM) ;
            
    BOOL               CALLBACK AboutDlgProc         (HWND, UINT, WPARAM, LPARAM) ;
            int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
            
                                                             PSTR szCmdLine, int iCmdShow)
            
    {
            
              static TCHAR szAppName[] = TEXT ("About1") ;
            
               MSG                                  msg ;
            
               HWND                                 hwnd ;
            
        WNDCLASS                             wndclass ;
            
              
            
               wndclass.style                               = CS_HREDRAW | CS_VREDRAW ;
            
               wndclass.lpfnWndProc                         = WndProc ;
            
               wndclass.cbClsExtra                          = 0 ;
            
               wndclass.cbWndExtra                          = 0 ;
            
               wndclass.hInstance                           = hInstance ;
            
               wndclass.hIcon                               = LoadIcon (hInstance, szAppName) ;
            
               wndclass.hCursor                             = LoadCursor (NULL, IDC_ARROW) ;
            
               wndclass.hbrBackground              = (HBRUSH) GetStockObject (WHITE_BRUSH) ;
            
               wndclass.lpszMenuName                = szAppName ;
            
               wndclass.lpszClassName               = szAppName ;
            
       
            
               if (!RegisterClass (&wndclass))
            
               {
            
                      MessageBox (NULL, TEXT ("This program requires Windows NT!"),
            
                   szAppName, MB_ICONERROR) ;
            
                      return 0 ;
            
               }
            
       
            
               hwnd = CreateWindow (szAppName, TEXT ("About Box Demo Program"),
            
                                      WS_OVERLAPPEDWINDOW,
            
                                      CW_USEDEFAULT, CW_USEDEFAULT,
            
                                   CW_USEDEFAULT, CW_USEDEFAULT,
            
                                     NULL, NULL, hInstance, NULL) ;
            
       
            
               ShowWindow (hwnd, iCmdShow) ;
            
               UpdateWindow (hwnd) ;
            
       
            
               while (GetMessage (&msg, NULL, 0, 0))
            
               {
            
                              TranslateMessage (&msg) ;
            
                              DispatchMessage (&msg) ;
            
              }
            
               return msg.wParam ;
            
    }
            LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
            
    {
            
               static HINSTANCE hInstance ;
            
               switch (message)
            
               {
            
               case   WM_CREATE :
            
                    hInstance = ((LPCREATESTRUCT) lParam)->hInstance ;
            
                      return 0 ;
            
            
            
               case   WM_COMMAND :
            
                      switch (LOWORD (wParam))
            
                      {
            
                      case IDM_APP_ABOUT :
            
                                             DialogBox (hInstance, TEXT ("AboutBox"), hwnd, AboutDlgProc) ;
            
                                           break ;
            
                      }
            
                      return 0 ;
            
            
            
               case   WM_DESTROY :
            
                      PostQuitMessage (0) ;
            
                      return 0 ;
            
               }
            
               return DefWindowProc (hwnd, message, wParam, lParam) ;
            
    }
            BOOL CALLBACK AboutDlgProc (HWND hDlg, UINT message,WPARAM wParam, LPARAM lParam)
            
    {
            
               switch (message)
            
               {
            
               case   WM_INITDIALOG :
            
                      return TRUE ;
            
            
            
               case   WM_COMMAND :
            
                      switch (LOWORD (wParam))
            
                      {
            
                      case   IDOK :
            
                      case   IDCANCEL :
            
                                             EndDialog (hDlg, 0) ;
            
                                             return TRUE ;
            
             }
            
                      break ;
            
        }
            
      return FALSE ;
            
    }
    ABOUT1.RC (摘录) 
            
    //Microsoft Developer Studio generated resource script.
            
    #include "resource.h"
            
    #include "afxres.h"
            
    /////////////////////////////////////////////////////////////////////////////
            
    // Dialog
            
    ABOUTBOX DIALOG DISCARDABLE  32, 32, 180, 100
            
    STYLE DS_MODALFRAME | WS_POPUP
            
    FONT 8, "MS Sans Serif"
            
    BEGIN
            
       DEFPUSHBUTTON              "OK",IDOK,66,80,50,14
            
       ICON                                                     "ABOUT1",IDC_STATIC,7,7,21,20
            
       CTEXT                                                    "About1",IDC_STATIC,40,12,100,8
            
       CTEXT                                "About Box Demo Program",IDC_STATIC,7,40,166,8
            
       CTEXT                                "(c) Charles Petzold,
            
    1998",IDC_STATIC,7,52,166,8
            
    END
            /////////////////////////////////////////////////////////////////////////////
            
    // Menu
            
    ABOUT1      MENU DISCARDABLE
            
    BEGIN
            
       POPUP "&Help"
            
      BEGIN
            
                      MENUITEM "&About About1...",                             IDM_APP_ABOUT
            
      END
            
    END
            /////////////////////////////////////////////////////////////////////////////
            
    // Icon
            
    ABOUT1             ICON    DISCARDABLE     "About1.ico"
            
    RESOURCE.H (摘录) 
            
    // Microsoft Developer Studio generated include file.
            
    // Used by About1.rc
            
    #define IDM_APP_ABOUT        40001
            
    #define IDC_STATIC              -1
      

  6.   

    如果用对话框,不必那么麻烦
    假设有对话框资源IDD_DIALOG1
    如下:
    HWND ghDialog;//初始化函数或事件中:
    ghDialog = CreateDialog(hInst,(LPCTSTR)IDDF_DIALOG1,hParent,(DLGPROC)dlgProc);
    ShowWindow(ghDialog,SW_SHOW);//当程序结束时
    if(IsWindow(ghDialog))
         DestoryWindow(ghDialog);//加对话框的过程
    BOOL CALLBACK dlgPorc(HWND hDlg,UINT msg,WPARAM wParam,LPARAM lParam)
    {
       switch(msg)
           {
            case WM_INITDIALOG:
                     return TRUE;
            case WM_CLOSE:
                EndDialog(hDlg,1);
                return TRUE;
           }
    retur FALSE;
    }
      

  7.   

    回复人: tigergt() ( ) 信誉:100  2005-01-22 11:49:00  得分: 0  
     
     
       有两种方式:
    1)模式对话框:
         CMyDialog MyDialog;
         MyDialog.DoModal();
    2)无模式对话框:
         CMyDialog* MyDialog;
         MyDialog = new CMyDialog;
         ASSERT_VALID(MyDialog);
         bResult = MyDialog->Create(IDD_DIALOG_MyDialog);
         MyDialog->ShowWindow(TRUE);