Windows编程之非模态对话框

//  注:  最近真不是喜欢上windows编程了..  项目需要啊
  设置程序图标:
应用程序图标
static HICON hIcon1 = LoadIcon(hApp, MAKEINTRESOURCE(IDI_ICON1));
SendMessage(hMainWnd, WM_SETICON, ICON_BIG, (LPARAM)hIcon1);    //任务栏 alt + tab
SendMessage(hMainWnd, WM_SETICON, ICON_SMALL, (LPARAM)hIcon1);  //标题栏 程序exe图标
1  创建非模态对话框

<1>  HWNDCreateDialog(  HINSTANCE hInstance,  // handle to module

                LPCTSTRlpTemplate,    // dialog box template name

                HWNDhWndParent,    // handle to owner window

                DLGPROClpDialogFunc  // dialog box procedure);

<2> HWND CreateDialogIndirect(  HINSTANCE hInstance,        // handle to module

                LPCDLGTEMPLATE lpTemplate,   //dialog box template

                HWND hWndParent,           // handle to owner window

                DLGPROC lpDialogFunc         //dialog box procedure);

<3> HWND CreateDialogIndirectParam(  HINSTANCE hInstance,   // handle to module

                LPCDLGTEMPLATE lpTemplate,  // dialog box template

                HWND hWndParent,          // handle to owner window

                DLGPROC lpDialogFunc,       // dialog box procedure

                LPARAM lParamInit           // initialization value);

<4> HWND CreateDialogParam(  HINSTANCE hInstance,     // handle to module

                LPCTSTR lpTemplateName,    //dialog box template

                HWND hWndParent,         // handle to owner window

                DLGPROC lpDialogFunc,      //dialog box procedure

                LPARAM dwInitParam        //initialization value);

         参数跟非模态对话框一致。CreateDialogParam会调用CreateWindowExe去创建一个窗口,所以这样的对话框其实就是窗口。当然单独一个对话框可以没有父窗口直接单独存在。

2   含有父窗口的对话框程序


自定义窗口类(无父窗口)的对话框程序

<1>在脚本中指定对话框的类型以及各种控件假定脚本名称为new.dlg


<2>然后在rc文件中添加脚本


<3>在WinMain函数注册窗口类

         注意这里的CreateDialog的最后一个参数DLGPROC为NULL,因为在窗口类中指定了窗口过程函数。

[cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. int WINAPI WinMain (HINSTANCE hInstance, HINSTANCEhPrevInstance,PSTR szCmdLine, intiCmdShow)       
  2. {     
  3.     staticTCHAR szAppName[] = TEXT ("HexCalc");  
  4.     HWND                    hwnd ;  
  5.     MSG                     msg ;  
  6.     WNDCLASS                wndclass ;  
  7.          
  8.     wndclass.style              = CS_HREDRAW | CS_VREDRAW ;  
  9.     wndclass.lpfnWndProc        = WndProc ;  
  10.     wndclass.cbClsExtra         = 0 ;  
  11.     wndclass.cbWndExtra         = DLGWINDOWEXTRA ; // note here  
  12.     wndclass.hInstance          = hInstance ;  
  13.     wndclass.hIcon              = LoadIcon (NULL, IDI_APPLICATION) ;  
  14.     wndclass.hCursor            = LoadCursor (NULL, IDC_ARROW) ;  
  15.     wndclass.hbrBackground      = (HBRUSH) GetStockObject (WHITE_BRUSH) ;  
  16.     wndclass.lpszMenuName       = NULL ;  
  17.     wndclass.lpszClassName      =szAppName ;  
  18.          
  19.     if(!RegisterClass (&wndclass))     
  20.          {  
  21.         MessageBox (  NULL, TEXT ("Thisprogram requires Windows NT!"), szAppName, MB_ICONERROR) ;   
  22.         return0 ;  
  23.     }  
  24.          
  25.          hwnd =CreateDialog(hInstance,szAppName,NULL,NULL);    //note here  
  26.          
  27.     ShowWindow (hwnd, iCmdShow) ;  
  28.     UpdateWindow (hwnd) ;  
  29.          
  30.     while(GetMessage (&msg, NULL, 0, 0))         
  31.          {  
  32.                    TranslateMessage (&msg) ;  
  33.                    DispatchMessage (&msg) ;  
  34.     }  
  35.          
  36.     returnmsg.wParam ;        
  37. }  
生成的窗口程序程序如图所示:


12 从资源加载(无父窗口)的对话框程序

[cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. LRESULT CALLBACKWndProc(HWND,UINT,WPARAM,LPARAM) ;  
  2. int WINAPI WinMain (HINSTANCE hInstance, HINSTANCEhPrevInstance,PSTR szCmdLine, intiCmdShow)       
  3. {  
  4.     HWND                    hwnd ;  
  5.     MSG                     msg ;  
  6.     
  7.          //hwnd =CreateDialog(hInstance,MAKEINTRESOURCE(IDD_DIALOG1),NULL,(DLGPROC)WndProc);  
  8.     hwnd =CreateDialogParam(hInstance,MAKEINTRESOURCE(IDD_DIALOG1),NULL,(DLGPROC)WndProc,NULL);  
  9.    
  10.     ShowWindow (hwnd, iCmdShow) ;  
  11.     UpdateWindow (hwnd) ;  
  12.          
  13.     while(GetMessage (&msg, NULL, 0, 0))         
  14.          {  
  15.                    TranslateMessage (&msg) ;  
  16.                    DispatchMessage (&msg) ;  
  17.     }     
  18.     returnmsg.wParam ;        
  19. }  
可以看到这里没有窗口的设计,窗口的注册,因为这种从资源加载的对话框的窗口类是已经定义的,就像那种PushButton一样,都是定义好的窗口的类,因而不需要注册。

生成的单独对话框程序如下图所示:


转自:http://blog.csdn.net/ddupd/article/details/24491201

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值