怎么用SDK API创建一个模式和非模式窗口.只用SDK API 实现,请指点一下.用VC和BCB都很容易,SDK怎么做.

解决方案 »

  1.   

    use DialogBox and CreateDialog APIs, seehttp://cpp.enisoc.com/articles/dialogs/
      

  2.   

    摸态:用DialogBox(HINSTANCE, ID, HPWND, DIALOGPROC)创建,并自动显示.(如果在资源中定义为WS_VISIBLE风格)在对话框窗口函数中退出消息中,用
    EndDialog(hwndDlg, LOWORD(wParam)) 。非摸态:用CreateDialog(HINSTANCE, ID, HPWND, DIALOGPROC)创建显示,用WS_VISIBLE风格则自动显示,否则需要调用ShowWindwo(hwnd, nCmdShow)显示。
    在对话框过程退出消息中,用DestroyWindow(hwndDlg)结束这两种形式的对话框处理的消息基本相同,
    可以处理WM_INITDIALOG消息,其他消息基本和窗口消息相似。非摸态对话框在消息循环处理上有一点区别如:
    while(GetMessage(&msg, 0, 0))
    {
    if(!hDlg || !IsDialogMessage(hDlg,&msg))
    TranslateMessage(&msg);
    DespatchMessage(&msg);
    }
      

  3.   

    I never tried, but you might want to try the suggestion in this post:http://groups.google.com/groups?hl=en&lr=&ie=UTF-8&selm=34f899ba.1679575%40forums.sybase.com
      

  4.   

    http://community.csdn.net/Expert/topic/3229/3229267.xml?temp=.5224268
      

  5.   


       假设 窗口A  先出现,  再出现 窗口B ,   如果 想要B达到模式对话框的效果,可以在 窗口B 出现的时候 把 A disable 掉  然后当B 销毁或消隐的时候再enable A
      

  6.   

    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