你的位置:首页 > 操作系统

[操作系统]Creating Dialogbased Win32 Application / 创建基于对话框的Win32应用程序(三)Checkbox的应用、窗体置顶 / Win32, VC++, Windows


创建基于对话框的Win32应用程序(三) —— Checkbox的应用、窗体置顶

 

上一节创建的窗体应用程序中,我们用到了Button和StaticText这两个控件。这一节中我们将学习使用Checkbox控件,并实现将窗体置顶的功能。

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

 

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

 

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

 

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

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

 

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

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

 

 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   switch (id) {26   case IDC_CHECKONTOP:27     SetWindowPos(hWnd, IsDlgButtonChecked(hWnd, IDC_CHECKONTOP)28       ? HWND_TOPMOST : HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);29     break;30   case IDNEW:31     DialogBoxParam(NULL, MAKEINTRESOURCE(IDD_NEWDIALOG),32       hWnd, NewDlg_Proc, NULL);33     break;34   case IDCANCEL:35     SendMessage(hWnd, WM_CLOSE, 0, 0);36     break;37 38   }39 }40 41 BOOL Dlg_OnInitDialog(HWND hWnd, HWND hWndFocus, LPARAM lParam) {42   SetWindowPos(hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);43   CheckDlgButton(hWnd, IDC_CHECKONTOP, BST_CHECKED);44 45   return(TRUE);46 }47 48 INT_PTR WINAPI Dlg_Proc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {49   switch (uMsg)50   {51     chHANDLE_DLGMSG(hWnd, WM_INITDIALOG, Dlg_OnInitDialog);52     chHANDLE_DLGMSG(hWnd, WM_COMMAND, Dlg_OnCommand);53   case WM_CLOSE:54     EndDialog(hWnd, 0);55     break;56   }57 58   return(FALSE);59 }60 61 int WINAPI WinMain(HINSTANCE hinstExe, HINSTANCE, PTSTR pszCmdLine, int) {62   DialogBoxParam(hinstExe, MAKEINTRESOURCE(IDD_DIALOG),63     NULL, Dlg_Proc, _ttoi(pszCmdLine));64 65   return(0);66 }

Win32WindowsApplication.cpp
 1 // Microsoft Visual C++ generated resource script. 2 // 3 #include "resource.h" 4  5 #define APSTUDIO_READONLY_SYMBOLS 6 ///////////////////////////////////////////////////////////////////////////// 7 // 8 // Generated from the TEXTINCLUDE 2 resource. 9 // 10 #include "winres.h" 11  12 ///////////////////////////////////////////////////////////////////////////// 13 #undef APSTUDIO_READONLY_SYMBOLS 14  15 ///////////////////////////////////////////////////////////////////////////// 16 // Chinese (Simplified, PRC) resources 17  18 #if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_CHS) 19 LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED 20  21 #ifdef APSTUDIO_INVOKED 22 ///////////////////////////////////////////////////////////////////////////// 23 // 24 // TEXTINCLUDE 25 // 26  27 1 TEXTINCLUDE  28 BEGIN 29   "resource.h\0" 30 END 31  32 2 TEXTINCLUDE  33 BEGIN 34   "#include ""winres.h""\r\n" 35   "\0" 36 END 37  38 3 TEXTINCLUDE  39 BEGIN 40   "\r\n" 41   "\0" 42 END 43  44 #endif  // APSTUDIO_INVOKED 45  46  47 ///////////////////////////////////////////////////////////////////////////// 48 // 49 // Dialog 50 // 51  52 IDD_DIALOG DIALOGEX 0, 0, 309, 177 53 STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU 54 CAPTION "Win32WindowsApplication" 55 FONT 8, "MS Shell Dlg", 400, 0, 0x1 56 BEGIN 57   DEFPUSHBUTTON  "New",IDNEW,198,156,50,14 58   PUSHBUTTON   "Cancel",IDCANCEL,252,156,50,14 59   CONTROL     "On Top",IDC_CHECKONTOP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,160,39,10 60 END 61  62 IDD_NEWDIALOG DIALOGEX 0, 0, 83, 26 63 STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU 64 CAPTION "NewDialog" 65 FONT 8, "MS Shell Dlg", 400, 0, 0x1 66 BEGIN 67   LTEXT      "This is a new dialog.",IDC_STATIC,7,7,68,11 68 END 69  70  71 ///////////////////////////////////////////////////////////////////////////// 72 // 73 // DESIGNINFO 74 // 75  76 #ifdef APSTUDIO_INVOKED 77 GUIDELINES DESIGNINFO 78 BEGIN 79   IDD_DIALOG, DIALOG 80   BEGIN 81     LEFTMARGIN, 7 82     RIGHTMARGIN, 302 83     TOPMARGIN, 7 84     BOTTOMMARGIN, 170 85   END 86  87   IDD_NEWDIALOG, DIALOG 88   BEGIN 89     LEFTMARGIN, 7 90     RIGHTMARGIN, 76 91     TOPMARGIN, 7 92     BOTTOMMARGIN, 19 93   END 94 END 95 #endif  // APSTUDIO_INVOKED 96  97  98 ///////////////////////////////////////////////////////////////////////////// 99 //100 // AFX_DIALOG_LAYOUT101 //102 103 IDD_DIALOG AFX_DIALOG_LAYOUT104 BEGIN105   0106 END107 108 IDD_NEWDIALOG AFX_DIALOG_LAYOUT109 BEGIN110   0111 END112 113 #endif  // Chinese (Simplified, PRC) resources114 /////////////////////////////////////////////////////////////////////////////115 116 117 118 #ifndef APSTUDIO_INVOKED119 /////////////////////////////////////////////////////////////////////////////120 //121 // Generated from the TEXTINCLUDE 3 resource.122 //123 124 125 /////////////////////////////////////////////////////////////////////////////126 #endif  // not APSTUDIO_INVOKED

Win32WindowsApplication.rc
 1 //{{NO_DEPENDENCIES}} 2 // Microsoft Visual C++ generated include file. 3 // Used by Win32WindowsApplication.rc 4 // 5 #define IDD_DIALOG           101 6 #define IDD_NEWDIALOG          103 7 #define IDNEW              1001 8 #define IDC_CHECKONTOP         1002 9 10 // Next default values for new objects11 // 12 #ifdef APSTUDIO_INVOKED13 #ifndef APSTUDIO_READONLY_SYMBOLS14 #define _APS_NEXT_RESOURCE_VALUE    10515 #define _APS_NEXT_COMMAND_VALUE     4000116 #define _APS_NEXT_CONTROL_VALUE     100317 #define _APS_NEXT_SYMED_VALUE      10118 #endif19 #endif

resource.h

22、此时再按下F5 Start Debugging,可以发现“On Top”复选框默认被点选,同时对话框已被置顶。

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

本文为本人原创,转载请注明出处。