KWinUI sample 2: Dialog based应用程序
KWinUI配合ResEdit来开发Dialog Based Application还是比较轻松的。
启动ResEdit添加一个简单的dialog资源,ResEdit为你生成两个文件,一个是资源文件,一个包含资源ID的头文件resource.h。我这里简单的把这两个文件的内容贴出来。
resource.h
1 #ifndef IDC_STATIC
2 #define IDC_STATIC (-1)
3 #endif
4
5 #define IDD_DLG_MAIN 100
dlgmain.rc
1 // Generated by ResEdit 1.4.4.19
2 // Copyright (C) 2006-2008
3 // http://www.resedit.net
4
5 #include “resource.h”
6 #include <windows.h>
7 #include <commctrl.h>
8 #include <richedit.h>
9
10
11 //
12 // Dialog resources
13 //
14 IDD_DLG_MAIN DIALOG 0, 0, 186, 95
15 STYLE DS_3DLOOK DS_CENTER DS_MODALFRAME DS_SHELLFONT WS_VISIBLE WS_BORDER WS_CAPTION WS_DLGFRAME WS_POPUP WS_SYSMENU
16 CAPTION “Dialog”
17 FONT 8, “Ms Shell Dlg 2”
18 {
19 DEFPUSHBUTTON “OK”, IDOK, 129, 7, 50, 14, BS_DEFPUSHBUTTON
20 PUSHBUTTON “Cancel”, IDCANCEL, 129, 24, 50, 14, BS_PUSHBUTTON
21 }
然后就是我们的KWinUI主程序了,内容如下:
1 #include “resource.h”
2 #include “kapp.h”
3 #include “kwin.h”
4
5 using namespace kwinui;
6
7 class KDlgMain : public KDialogBase
8 public:
9 typedef KDialogBase
10 enum{IDD=IDD_DLG_MAIN};
11
12 BEGIN_MSG_MAP
13 COMMAND_ID_HANDLER(IDOK,OnOK)
14 COMMAND_ID_HANDLER(IDCANCEL,OnCancel)
15 END_MSG_MAP(__base)
16
17 LRESULT OnOK(WORD wID,WORD wNotifyCode,HWND hWndCtrl,bool& bHandled){
18 ShowMessage(_T(“KWinUI dialog based program sample!”));
19 return TRUE;
20 }
21
22 LRESULT OnCancel(WORD wID,WORD wNotifyCode,HWND hWndCtrl,bool& bHandled){
23 EndDialog(wID);
24 ::PostQuitMessage(0);
25 return TRUE;
26 }
27 };
28
29 class KDlgApp : public KWinApp
30 public:
31 bool InitInstance(){
32 m_pMainWindow=new KDlgMain();
33 m_pMainWindow->Create(NULL);
34 return true;
35 }
36 private:
37 KDlgMain* m_pMainWindow;
38 };
39
40 KDlgApp theApp;
当然,我这里创建的是一个无模式对话框,使用了KWinUI的消息循环,你也可以把第33、34行改为
m_pMainWindow->DoModal();
return false;
这样的话会创建一个模式对话框,使用对话框自己提供的消息循环。
使用模式对话框时,可以将程序的第24行注释掉,但是对于无模式对话框,此行代码必须存在才能正确的结束程序。
实际上KWinUI程序的风格和WTL是很相似的,有WTL开发经历的童鞋看到这段代码应该感觉比较亲切。
用Visual C++ 2008 Express win32 project默认设置静态链接Release版本生成的程序大小为47KB。
代码下载
截图: