开创基于对话框的Windows应用程序(三) ——
Checkbox的行使、窗体置顶、设置图标

制造基于对话框的Windows应用程序(三) ——
Checkbox的利用、窗体置顶、设置图标

创制基于对话框的Windows应用程序(二) ——
Button的行使、新建子窗体

创制基于对话框的Windows应用程序(二) ——
Button的应用、新建子窗体

 

 

 

 

  上一节创立的窗体应用程序中,大家用到了Button和StaticText那三个控件。这一节中我们将学习运用Checkbox控件,并完结将窗体置顶和安装图标的效果。

  上一节创设的窗体应用程序中,我们用到了Button和StaticText那多少个控件。这一节中大家将学习应用Checkbox控件,并完结将窗体置顶和设置图标的功能。

  能够窥见上一节创建的窗体中,点击OK和Cancel多个按钮是向来不别的反响的。现在我们来为她们添加退出对话框的出力。

  可以窥见上一节创制的窗体中,点击OK和Cancel七个按钮是尚未别的影响的。现在我们来为他们添加退出对话框的机能。

17、首先切换到Reasource
View(Ctrl+Shift+E),找到待修改的主窗体,并从Toolbox(Ctrl+Atl+X)中添加Checkbox控件如下:

17、首先切换来Reasource
View(Ctrl+Shift+E),找到待修改的主窗体,并从Toolbox(Ctrl+Atl+X)中添加Checkbox控件如下:

6、首先定义命令信息响应函数(Dlg_OnCommand)如下:

6、首先定义命令音讯响应函数(Dlg_OnCommand)如下:

 澳门金沙国际 1

 澳门金沙国际 2

 澳门金沙国际 3

 澳门金沙国际 4

澳门金沙国际 5

澳门金沙国际 6

里面IDOK和IDCANCEL分别是按钮OK和Cancel对应的标识符。

其中IDOK和IDCANCEL分别是按钮OK和Cancel对应的标识符。

18、右键选中的控件点击Propertise修改有关内容。

18、右键选中的控件点击Propertise修改有关内容。

7、接下去定义宏替换如下:

7、接下去定义宏替换如下:

 澳门金沙国际 7

 澳门金沙国际 8

 澳门金沙国际 9

 澳门金沙国际 10

澳门金沙国际 11

澳门金沙国际 12

8、再在回调函数(Dlg_【澳门金沙国际】新建子窗体,创制基于对话框的Windows应用程序。Proc)中利用宏替换调用命令音讯响应函数(Dlg_OnCommand)如下:

8、再在回调函数(Dlg_Proc)中动用宏替换调用命令音讯响应函数(Dlg_OnCommand)如下:

澳门金沙国际 13

澳门金沙国际 14

 澳门金沙国际 15

 澳门金沙国际 16

19、在被调用的命令音信响应函数(Dlg_OnCommand)中添加对新增控件的响应操作。

19、在被调用的一声令下音讯响应函数(Dlg_OnCommand)中添加对新增控件的响应操作。

9、由于HANDLE_WM_COMMAND是在windowsx.h头文件中定义的,故添加其引用。

9、由于HANDLE_WM_COMMAND是在windowsx.h头文件中定义的,故添加其引述。

 澳门金沙国际 17

 澳门金沙国际 18

 澳门金沙国际 19

 澳门金沙国际 20

其中HWND_TOPMOST将使窗体具备置顶属性。

其中HWND_TOPMOST将使窗体具备置顶属性。

10、此时按下F5 Start
Debugging,再点击OK或Cancel按钮可以看出新建的对话框将会倒闭。

10、此时按下F5 Start
Debugging,再点击OK或Cancel按钮可以观察新建的对话框将会关闭。

20、此时按下F5 Start Debugging,再点击“On
Top”复选框,可以窥见对话框已被置顶,再一次点击则废除。

20、此时按下F5 Start Debugging,再点击“On
Top”复选框,可以发现对话框已被置顶,再度点击则打消。

 澳门金沙国际 21

 澳门金沙国际 22

 澳门金沙国际 23

 澳门金沙国际 24

  上边大家演示怎么着新建子窗体。

  上边我们演示怎么样新建子窗体。

接下去考虑让对话框默许具备置顶属性,同时“On Top”复选框默许被点选。

接下去考虑让对话框默认具备置顶属性,同时“On Top”复选框默许被点选。

11、首先在Solution Explorer或 Resources View 中右键Add
Resource,接纳Dialog。并在Resources View
中找到新建Dialog,右键Propertise修改相关内容。

11、首先在Solution Explorer或 Resources View 中右键Add
Resource,选拔Dialog。并在Resources View
中找到新建Dialog,右键Propertise修改有关内容。

21、定义对话框的初叶化音讯响应函数(Dlg_OnInitDialog),并在对话框的回调函数(Dlg_Proc)中运用上一节的宏替换调用该函数。

21、定义对话框的起首化信息响应函数(Dlg_OnInitDialog),并在对话框的回调函数(Dlg_Proc)中运用上一节的宏替换调用该函数。

澳门金沙国际 , 澳门金沙国际 25

 澳门金沙国际 26

 澳门金沙国际 27

 澳门金沙国际 28

澳门金沙国际 29

澳门金沙国际 30

22、在早先化音讯响应函数(Dlg_OnInitDialog)中,大家还能为对话框设置图标。

22、在起先化音讯响应函数(Dlg_OnInitDialog)中,大家还足以为对话框设置图标。

 

 

澳门金沙国际 31

澳门金沙国际 32

澳门金沙国际 33

澳门金沙国际 34

澳门金沙国际 35

澳门金沙国际 36

澳门金沙国际 37

澳门金沙国际 38

澳门金沙国际 39

澳门金沙国际 40

12、点选并按下Delete键删掉新建子对话框中没用的OK和Cancel按钮。当
.h/.rc/.cpp文件中设有所删除控件的相干代码时记念一并删除或注释掉。

12、点选并按下Delete键删掉新建子对话框中没用的OK和Cancel按钮。当
.h/.rc/.cpp文件中留存所删除控件的连带代码时记得一并剔除或注释掉。

澳门金沙国际 41澳门金沙国际 42

澳门金沙国际 43澳门金沙国际 44

 澳门金沙国际 45

 澳门金沙国际 46

 1 #include <Windows.h>
 2 #include <windowsx.h>
 3 #include <tchar.h>
 4 #include "Resource.h"
 5 
 6 // Sets the dialog box icons
 7 inline void chSETDLGICONS(HWND hWnd, int idi) {
 8     SendMessage(hWnd, WM_SETICON, ICON_BIG, (LPARAM)
 9         LoadIcon((HINSTANCE)GetWindowLongPtr(hWnd, GWLP_HINSTANCE),
10             MAKEINTRESOURCE(idi)));
11     SendMessage(hWnd, WM_SETICON, ICON_SMALL, (LPARAM)
12         LoadIcon((HINSTANCE)GetWindowLongPtr(hWnd, GWLP_HINSTANCE),
13             MAKEINTRESOURCE(idi)));
14 }
15 
16 // The normal HANDLE_MSG macro in WindowsX.h does not work properly for dialog
17 // boxes because DlgProc returns a BOOL instead of an LRESULT (like
18 // WndProcs). This chHANDLE_DLGMSG macro corrects the problem:
19 #define chHANDLE_DLGMSG(hWnd, message, fn)                 \
20    case (message): return (SetDlgMsgResult(hWnd, uMsg,     \
21       HANDLE_##message((hWnd), (wParam), (lParam), (fn))))
22 
23 INT_PTR WINAPI NewDlg_Proc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
24     switch (uMsg)
25     {
26     case WM_CLOSE:
27         EndDialog(hWnd, 0);
28         break;
29     }
30 
31     return(FALSE);
32 }
33 
34 void Dlg_OnCommand(HWND hWnd, int id, HWND hWndCtl, UINT codeNotify) {
35     switch (id) {
36     case IDC_CHECKONTOP:
37         SetWindowPos(hWnd, IsDlgButtonChecked(hWnd, IDC_CHECKONTOP)
38             ? HWND_TOPMOST : HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
39         break;
40     case IDNEW:
41         DialogBoxParam(NULL, MAKEINTRESOURCE(IDD_NEWDIALOG),
42             hWnd, NewDlg_Proc, NULL);
43         break;
44     case IDCANCEL:
45         SendMessage(hWnd, WM_CLOSE, 0, 0);
46         break;
47 
48     }
49 }
50 
51 BOOL Dlg_OnInitDialog(HWND hWnd, HWND hWndFocus, LPARAM lParam) {
52     chSETDLGICONS(hWnd, IDI_ICON1);
53 
54     SetWindowPos(hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
55     CheckDlgButton(hWnd, IDC_CHECKONTOP, BST_CHECKED);
56 
57     return(TRUE);
58 }
59 
60 INT_PTR WINAPI Dlg_Proc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
61     switch (uMsg)
62     {
63         chHANDLE_DLGMSG(hWnd, WM_INITDIALOG, Dlg_OnInitDialog);
64         chHANDLE_DLGMSG(hWnd, WM_COMMAND, Dlg_OnCommand);
65     case WM_CLOSE:
66         EndDialog(hWnd, 0);
67         break;
68     }
69 
70     return(FALSE);
71 }
72 
73 int WINAPI WinMain(HINSTANCE hinstExe, HINSTANCE, PTSTR pszCmdLine, int) {
74     DialogBoxParam(hinstExe, MAKEINTRESOURCE(IDD_DIALOG),
75         NULL, Dlg_Proc, _ttoi(pszCmdLine));
76 
77     return(0);
78 }
 1 #include <Windows.h>
 2 #include <windowsx.h>
 3 #include <tchar.h>
 4 #include "Resource.h"
 5 
 6 // Sets the dialog box icons
 7 inline void chSETDLGICONS(HWND hWnd, int idi) {
 8     SendMessage(hWnd, WM_SETICON, ICON_BIG, (LPARAM)
 9         LoadIcon((HINSTANCE)GetWindowLongPtr(hWnd, GWLP_HINSTANCE),
10             MAKEINTRESOURCE(idi)));
11     SendMessage(hWnd, WM_SETICON, ICON_SMALL, (LPARAM)
12         LoadIcon((HINSTANCE)GetWindowLongPtr(hWnd, GWLP_HINSTANCE),
13             MAKEINTRESOURCE(idi)));
14 }
15 
16 // The normal HANDLE_MSG macro in WindowsX.h does not work properly for dialog
17 // boxes because DlgProc returns a BOOL instead of an LRESULT (like
18 // WndProcs). This chHANDLE_DLGMSG macro corrects the problem:
19 #define chHANDLE_DLGMSG(hWnd, message, fn)                 \
20    case (message): return (SetDlgMsgResult(hWnd, uMsg,     \
21       HANDLE_##message((hWnd), (wParam), (lParam), (fn))))
22 
23 INT_PTR WINAPI NewDlg_Proc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
24     switch (uMsg)
25     {
26     case WM_CLOSE:
27         EndDialog(hWnd, 0);
28         break;
29     }
30 
31     return(FALSE);
32 }
33 
34 void Dlg_OnCommand(HWND hWnd, int id, HWND hWndCtl, UINT codeNotify) {
35     switch (id) {
36     case IDC_CHECKONTOP:
37         SetWindowPos(hWnd, IsDlgButtonChecked(hWnd, IDC_CHECKONTOP)
38             ? HWND_TOPMOST : HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
39         break;
40     case IDNEW:
41         DialogBoxParam(NULL, MAKEINTRESOURCE(IDD_NEWDIALOG),
42             hWnd, NewDlg_Proc, NULL);
43         break;
44     case IDCANCEL:
45         SendMessage(hWnd, WM_CLOSE, 0, 0);
46         break;
47 
48     }
49 }
50 
51 BOOL Dlg_OnInitDialog(HWND hWnd, HWND hWndFocus, LPARAM lParam) {
52     chSETDLGICONS(hWnd, IDI_ICON1);
53 
54     SetWindowPos(hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
55     CheckDlgButton(hWnd, IDC_CHECKONTOP, BST_CHECKED);
56 
57     return(TRUE);
58 }
59 
60 INT_PTR WINAPI Dlg_Proc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
61     switch (uMsg)
62     {
63         chHANDLE_DLGMSG(hWnd, WM_INITDIALOG, Dlg_OnInitDialog);
64         chHANDLE_DLGMSG(hWnd, WM_COMMAND, Dlg_OnCommand);
65     case WM_CLOSE:
66         EndDialog(hWnd, 0);
67         break;
68     }
69 
70     return(FALSE);
71 }
72 
73 int WINAPI WinMain(HINSTANCE hinstExe, HINSTANCE, PTSTR pszCmdLine, int) {
74     DialogBoxParam(hinstExe, MAKEINTRESOURCE(IDD_DIALOG),
75         NULL, Dlg_Proc, _ttoi(pszCmdLine));
76 
77     return(0);
78 }

13、在View中打开Toolbox(Ctrl+Alt+X),添加Static
Text控件到新建子窗体中,修改控件内容并调整两岸至适宜大小。

13、在View中开拓Toolbox(Ctrl+Alt+X),添加Static
Text控件到新建子窗体中,修改控件内容并调动两岸至适宜大小。

Win32WindowsApplication.cpp

Win32WindowsApplication.cpp

 澳门金沙国际 47

 澳门金沙国际 48

23、此时再按下F5 Start Debugging,可以窥见“On
Top”复选框默许被点选,同时对话框已被置顶,对话框左上角以及.exe文件出现了大家抬高的图标。

23、此时再按下F5 Start Debugging,可以发现“On
Top”复选框默许被点选,同时对话框已被置顶,对话框左上角以及.exe文件出现了我们添加的图标。

澳门金沙国际 49

澳门金沙国际 50

————————————————

————————————————

14、找到之前Dialog中的Button按钮,修改其Propertise。

14、找到以前Dialog中的Button按钮,修改其Propertise。

本文为自家原创,转发请评释出处。

正文为自我原创,转发请注脚出处。

 澳门金沙国际 51

 澳门金沙国际 52

澳门金沙国际 53

澳门金沙国际 54

澳门金沙国际 55

澳门金沙国际 56

澳门金沙国际 57

澳门金沙国际 58

15、切换到.cpp文件中,修改被调用的下令音讯响应函数(Dlg_OnCommand),在IDNEW的case中调用DialogBoxParam,并编写子对话框的回调函数(NewDlg_Proc)。

15、切换到.cpp文件中,修改被调用的下令音讯响应函数(Dlg_OnCommand),在IDNEW的case中调用DialogBoxParam,并编写子对话框的回调函数(NewDlg_Proc)。

 澳门金沙国际 59

 澳门金沙国际 60

澳门金沙国际 61澳门金沙国际 62

澳门金沙国际 63澳门金沙国际 64

 1 #include <Windows.h>
 2 #include <windowsx.h>
 3 #include <tchar.h>
 4 #include "Resource.h"
 5 
 6 // The normal HANDLE_MSG macro in WindowsX.h does not work properly for dialog
 7 // boxes because DlgProc returns a BOOL instead of an LRESULT (like
 8 // WndProcs). This chHANDLE_DLGMSG macro corrects the problem:
 9 #define chHANDLE_DLGMSG(hWnd, message, fn)                 \
10    case (message): return (SetDlgMsgResult(hWnd, uMsg,     \
11       HANDLE_##message((hWnd), (wParam), (lParam), (fn))))
12 
13 INT_PTR WINAPI NewDlg_Proc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
14     switch (uMsg)
15     {
16     case WM_CLOSE:
17         EndDialog(hWnd, 0);
18         break;
19     }
20 
21     return(FALSE);
22 }
23 
24 void Dlg_OnCommand(HWND hWnd, int id, HWND hWndCtl, UINT codeNotify) {
25 
26     switch (id) {
27     case IDNEW:
28         DialogBoxParam(NULL, MAKEINTRESOURCE(IDD_NEWDIALOG),
29             hWnd, NewDlg_Proc, NULL);
30         break;
31     case IDCANCEL:
32         SendMessage(hWnd, WM_CLOSE, 0, 0);
33         break;
34 
35     }
36 }
37 
38 INT_PTR WINAPI Dlg_Proc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
39     switch (uMsg)
40     {
41     chHANDLE_DLGMSG(hWnd, WM_COMMAND, Dlg_OnCommand);
42     case WM_CLOSE:
43         EndDialog(hWnd, 0);
44         break;
45     }
46 
47     return(FALSE);
48 }
49 
50 int WINAPI WinMain(HINSTANCE hinstExe, HINSTANCE, PTSTR pszCmdLine, int) {
51     DialogBoxParam(hinstExe, MAKEINTRESOURCE(IDD_DIALOG),
52         NULL, Dlg_Proc, _ttoi(pszCmdLine));
53     return(0);
54 }
 1 #include <Windows.h>
 2 #include <windowsx.h>
 3 #include <tchar.h>
 4 #include "Resource.h"
 5 
 6 // The normal HANDLE_MSG macro in WindowsX.h does not work properly for dialog
 7 // boxes because DlgProc returns a BOOL instead of an LRESULT (like
 8 // WndProcs). This chHANDLE_DLGMSG macro corrects the problem:
 9 #define chHANDLE_DLGMSG(hWnd, message, fn)                 \
10    case (message): return (SetDlgMsgResult(hWnd, uMsg,     \
11       HANDLE_##message((hWnd), (wParam), (lParam), (fn))))
12 
13 INT_PTR WINAPI NewDlg_Proc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
14     switch (uMsg)
15     {
16     case WM_CLOSE:
17         EndDialog(hWnd, 0);
18         break;
19     }
20 
21     return(FALSE);
22 }
23 
24 void Dlg_OnCommand(HWND hWnd, int id, HWND hWndCtl, UINT codeNotify) {
25 
26     switch (id) {
27     case IDNEW:
28         DialogBoxParam(NULL, MAKEINTRESOURCE(IDD_NEWDIALOG),
29             hWnd, NewDlg_Proc, NULL);
30         break;
31     case IDCANCEL:
32         SendMessage(hWnd, WM_CLOSE, 0, 0);
33         break;
34 
35     }
36 }
37 
38 INT_PTR WINAPI Dlg_Proc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
39     switch (uMsg)
40     {
41     chHANDLE_DLGMSG(hWnd, WM_COMMAND, Dlg_OnCommand);
42     case WM_CLOSE:
43         EndDialog(hWnd, 0);
44         break;
45     }
46 
47     return(FALSE);
48 }
49 
50 int WINAPI WinMain(HINSTANCE hinstExe, HINSTANCE, PTSTR pszCmdLine, int) {
51     DialogBoxParam(hinstExe, MAKEINTRESOURCE(IDD_DIALOG),
52         NULL, Dlg_Proc, _ttoi(pszCmdLine));
53     return(0);
54 }

Win32WindowsApplication.cpp

Win32WindowsApplication.cpp

16、此时按下F5 Start
Debugging,再点击New按钮,可以见见刚才新建的子对话框。

16、此时按下F5 Start
Debugging,再点击New按钮,可以看到刚才新建的子对话框。

 澳门金沙国际 65

 澳门金沙国际 66

————————————————

————————————————

正文为自家原创,转发请声明出处。

本文为本身原创,转发请注解出处。

相关文章