对话框,光标,字符串,位图——Windows编程上机作业之三

对话框,光标,字符串,位图——Windows编程上机作业之三

 

1. 光标

    通过菜单选择使用ARROWWAIT和一个自定义光标。

2.位图

     设计五个位图。

3.对话框

    设计一个模式对话框,复选五个位图的显示。

    设计一个无模式对话框,单选五个位图中的一个进行显示。

    设计一个打开文件通用对话框,通过消息框显示获取的文件名。

4.字符串

    在客户区和标题栏显示的文字采用字符串资源定义的方法。所显示的文字信息不在程序中出现。

5.中英文菜单切换

    将菜单项的显示文字定义为字符串资源或通过菜单整体切换

 


对话框,光标,字符串,位图——Windows编程上机作业之三_第1张图片

对话框,光标,字符串,位图——Windows编程上机作业之三_第2张图片


对话框,光标,字符串,位图——Windows编程上机作业之三_第3张图片

对话框,光标,字符串,位图——Windows编程上机作业之三_第4张图片

对话框,光标,字符串,位图——Windows编程上机作业之三_第5张图片

对话框,光标,字符串,位图——Windows编程上机作业之三_第6张图片


resource.h
 1 // {{NO_DEPENDENCIES}}
 2 //  Microsoft Visual C++ generated include file.
 3 //  Used by WinZJ.rc
 4 //
 5 #define  IDI_WINZJ                       101
 6 #define  IDC_WINZJ                       102
 7 #define  IDA_WINZJ                       103
 8 #define  IDM_WINZJ_CH                    104
 9 #define  IDM_WINZJ_EN                    105
10 #define  IDS_APPNAME_CH                  106
11 #define  IDS_APPNAME_EN                  107
12 #define  IDS_WNDCLASSNAME                108
13 #define  IDS_CURSOR_PREFIX_CH            109
14 #define  IDS_CURSOR_PREFIX_EN            110
15 #define  IDS_CURSOR_ARROW                111
16 #define  IDS_CURSOR_WAIT                 112
17 #define  IDS_CURSOR_USER_CH              113
18 #define  IDS_CURSOR_USER_EN              114
19 #define  IDD_CHECK                       115
20 #define  IDB_A                           116
21 #define  IDB_B                           117
22 #define  IDB_C                           118
23 #define  IDB_D                           119
24 #define  IDB_E                           120
25 #define  IDD_RADIO                       121
26 #define  IDC_CHECK1                      1001
27 #define  IDC_CHECK2                      1002
28 #define  IDC_CHECK3                      1003
29 #define  IDC_CHECK4                      1004
30 #define  IDC_CHECK5                      1005
31 #define  IDC_RADIO1                      1006
32 #define  IDC_RADIO2                      1007
33 #define  IDC_RADIO3                      1008
34 #define  IDC_RADIO4                      1009
35 #define  IDC_RADIO5                      1010
36 #define  IDM_EXIT                        40001
37 #define  IDM_MODAL                       40002
38 #define  IDM_MODALLESS                   40003
39 #define  IDM_FILE                        40004
40 #define  IDM_ARROW                       40005
41 #define  IDM_WAIT                        40006
42 #define  IDM_USER                        40007
43 #define  IDM_CHINESE                     40008
44 #define  IDM_ENGLISH                     40009
45 #define  IDM_INFO                        40010
46
47 //  Next default values for new objects
48 //  
49 #ifdef APSTUDIO_INVOKED
50 #ifndef APSTUDIO_READONLY_SYMBOLS
51 #define  _APS_NEXT_RESOURCE_VALUE        122
52 #define  _APS_NEXT_COMMAND_VALUE         40011
53 #define  _APS_NEXT_CONTROL_VALUE         1011
54 #define  _APS_NEXT_SYMED_VALUE           101
55 #endif
56 #endif
57


WinZJ.rc
  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  " afxres.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  "" afxres.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 //  Icon
 50 //
 51
 52 //  Icon with lowest ID value placed first to ensure application icon
 53 //  remains consistent on all systems.
 54 IDI_WINZJ               ICON                     " WinZJ.ico "
 55
 56 /**/ /////////////////////////////////////////////////////////////////////////////
 57 //
 58 //  Menu
 59 //
 60
 61 IDM_WINZJ_CH MENU
 62 BEGIN
 63     POPUP  " 文件(&F) "
 64     BEGIN
 65         MENUITEM  " 退出(&X) " ,                      IDM_EXIT
 66     END
 67     POPUP  " 对话框(&O) "
 68     BEGIN
 69         MENUITEM  " 打开模式对话框(&M)\tCtrl+A " ,      IDM_MODAL
 70         MENUITEM  " 打开无模式对话框(&L)\tCtrl+B " ,     IDM_MODALLESS
 71         MENUITEM  " 打开文件对话框(&F)\tCtrl+C " ,      IDM_FILE
 72     END
 73     POPUP  " 光标类型(&C) "
 74     BEGIN
 75         MENUITEM  " 光标&1(ARROW)\tCtrl+1 " ,         IDM_ARROW
 76         MENUITEM  " 光标&2(WAIT)\tCtrl+2 " ,          IDM_WAIT
 77         MENUITEM  " 光标&3(User)\tCtrl+3 " ,          IDM_USER
 78     END
 79     POPUP  " 语言(&L) "
 80     BEGIN
 81         MENUITEM  " 中文(&C)\tCtrl+Shift+C " ,        IDM_CHINESE
 82         MENUITEM  " &English\tCtrl+Shift+D " ,      IDM_ENGLISH
 83     END
 84     POPUP  " 关于(&A) "
 85     BEGIN
 86         MENUITEM  " 程序信息(&I)\tF1 " ,                IDM_INFO
 87     END
 88 END
 89
 90
 91 /**/ /////////////////////////////////////////////////////////////////////////////
 92 //
 93 //  Cursor
 94 //
 95
 96 IDC_WINZJ               CURSOR                   " WinZJ.cur "
 97
 98 /**/ /////////////////////////////////////////////////////////////////////////////
 99 //
100 //  Accelerator
101 //
102
103 IDA_WINZJ ACCELERATORS
104 BEGIN
105     VK_F1,          IDM_INFO,               VIRTKEY, NOINVERT
106      " A " ,            IDM_MODAL,              VIRTKEY, CONTROL, NOINVERT
107      " B " ,            IDM_MODALLESS,          VIRTKEY, CONTROL, NOINVERT
108      " C " ,            IDM_FILE,               VIRTKEY, CONTROL, NOINVERT
109      " 1 " ,            IDM_ARROW,              VIRTKEY, CONTROL, NOINVERT
110      " 2 " ,            IDM_WAIT,               VIRTKEY, CONTROL, NOINVERT
111      " 3 " ,            IDM_USER,               VIRTKEY, CONTROL, NOINVERT
112      " C " ,            IDM_CHINESE,            VIRTKEY, SHIFT, CONTROL, NOINVERT
113      " D " ,            IDM_ENGLISH,            VIRTKEY, SHIFT, CONTROL, NOINVERT
114 END
115
116
117 /**/ /////////////////////////////////////////////////////////////////////////////
118 //
119 //  Dialog
120 //
121
122 IDD_CHECK DIALOGEX  50 50 185 142
123 STYLE DS_SETFONT  |  DS_MODALFRAME  |  DS_FIXEDSYS  |  WS_POPUP  |  WS_CAPTION
124 CAPTION  " 复选显示位图选择 "
125 FONT  8 " MS Shell Dlg " 400 0 0x1
126 BEGIN
127     DEFPUSHBUTTON    " 确定 " ,IDOK, 128 , 15 , 50 , 14
128     PUSHBUTTON       " 取消 " ,IDCANCEL, 128 , 44 , 50 , 14
129     CONTROL          " 复选位图 1 " ,IDC_CHECK1, " Button " ,BS_AUTOCHECKBOX  |  WS_TABSTOP, 31 , 26 , 54 , 10
130     CONTROL          " 复选位图 2 " ,IDC_CHECK2, " Button " ,BS_AUTOCHECKBOX  |  WS_TABSTOP, 31 , 46 , 54 , 10
131     CONTROL          " 复选位图 3 " ,IDC_CHECK3, " Button " ,BS_AUTOCHECKBOX  |  WS_TABSTOP, 31 , 66 , 54 , 10
132     CONTROL          " 复选位图 4 " ,IDC_CHECK4, " Button " ,BS_AUTOCHECKBOX  |  WS_TABSTOP, 31 , 86 , 54 , 10
133     CONTROL          " 复选位图 5 " ,IDC_CHECK5, " Button " ,BS_AUTOCHECKBOX  |  WS_TABSTOP, 31 , 106 , 54 , 10
134 END
135
136 IDD_RADIO DIALOGEX  50 50 185 142
137 STYLE DS_SETFONT  |  DS_MODALFRAME  |  DS_FIXEDSYS  |  WS_POPUP  |  WS_CAPTION
138 CAPTION  " 单选显示位图选择 "
139 FONT  8 " MS Shell Dlg " 400 0 0x1
140 BEGIN
141     DEFPUSHBUTTON    " 确定 " ,IDOK, 128 , 15 , 50 , 14
142     PUSHBUTTON       " 取消 " ,IDCANCEL, 128 , 44 , 50 , 14
143     CONTROL          " 单选位图 1 " ,IDC_RADIO1, " Button " ,BS_AUTORADIOBUTTON, 31 , 26 , 54 , 10
144     CONTROL          " 单选位图 2 " ,IDC_RADIO2, " Button " ,BS_AUTORADIOBUTTON, 31 , 46 , 54 , 10
145     CONTROL          " 单选位图 3 " ,IDC_RADIO3, " Button " ,BS_AUTORADIOBUTTON, 31 , 66 , 54 , 10
146     CONTROL          " 单选位图 4 " ,IDC_RADIO4, " Button " ,BS_AUTORADIOBUTTON, 31 , 86 , 54 , 10
147     CONTROL          " 单选位图 5 " ,IDC_RADIO5, " Button " ,BS_AUTORADIOBUTTON, 31 , 106 , 54 , 10
148 END
149
150
151 /**/ /////////////////////////////////////////////////////////////////////////////
152 //
153 //  DESIGNINFO
154 //
155
156 #ifdef APSTUDIO_INVOKED
157 GUIDELINES DESIGNINFO
158 BEGIN
159     IDD_CHECK, DIALOG
160     BEGIN
161         LEFTMARGIN,  7
162         RIGHTMARGIN,  178
163         TOPMARGIN,  7
164         BOTTOMMARGIN,  135
165     END
166
167     IDD_RADIO, DIALOG
168     BEGIN
169         LEFTMARGIN,  7
170         RIGHTMARGIN,  178
171         TOPMARGIN,  7
172         BOTTOMMARGIN,  135
173     END
174 END
175 #endif      //  APSTUDIO_INVOKED
176
177
178 /**/ /////////////////////////////////////////////////////////////////////////////
179 //
180 //  Bitmap
181 //
182
183 IDB_A                   BITMAP                   " bmpA.bmp "
184 IDB_B                   BITMAP                   " bmpB.bmp "
185 IDB_C                   BITMAP                   " bmpC.bmp "
186 IDB_D                   BITMAP                   " bmpD.bmp "
187 IDB_E                   BITMAP                   " bmpE.bmp "
188
189 /**/ /////////////////////////////////////////////////////////////////////////////
190 //
191 //  String Table
192 //
193
194 STRINGTABLE
195 BEGIN
196     IDS_APPNAME_CH           " 第三次作业 "
197     IDS_APPNAME_EN           " My Work 3 "
198     IDS_WNDCLASSNAME         " WinZJ "
199     IDS_CURSOR_PREFIX_CH     " 当前使用的光标是: "
200     IDS_CURSOR_PREFIX_EN     " The current cursor is :  "
201     IDS_CURSOR_ARROW         " IDC_ARROW "
202 END
203
204 STRINGTABLE
205 BEGIN
206     IDS_CURSOR_WAIT          " IDC_WAIT "
207     IDS_CURSOR_USER_CH       " 我画的光标 "
208     IDS_CURSOR_USER_EN       " MY CURSOR "
209 END
210
211 #endif      //  Chinese (Simplified, PRC) resources
212 /**/ /////////////////////////////////////////////////////////////////////////////
213
214
215/////////////////////////////////////////////////////////////////////////////

216 //  English resources
217
218 #if  !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
219 LANGUAGE LANG_ENGLISH, SUBLANG_NEUTRAL
220
221 /**/ /////////////////////////////////////////////////////////////////////////////
222 //
223 //  Menu
224 //
225
226 IDM_WINZJ_EN MENU
227 BEGIN
228     POPUP  " &File "
229     BEGIN
230         MENUITEM  " E&xit " ,                       IDM_EXIT
231     END
232     POPUP  " &OpenDialog "
233     BEGIN
234         MENUITEM  " Open &Modal Dialog\tCtrl+A " ,  IDM_MODAL
235         MENUITEM  " Open Modal&Less Dialog\tCtrl+B " , IDM_MODALLESS
236         MENUITEM  " Open &File Dialog\tCtrl+C " ,   IDM_FILE
237     END
238     POPUP  " &Cursor "
239     BEGIN
240         MENUITEM  " Cursor&1(ARROW)\tCtrl+1 " ,     IDM_ARROW
241         MENUITEM  " Cursor&2(WAIT)\tCtrl+2 " ,      IDM_WAIT
242         MENUITEM  " Cursor&3(User)\tCtrl+3 " ,      IDM_USER
243     END
244     POPUP  " &Language "
245     BEGIN
246         MENUITEM  " 中文(&C)\tCtrl+Shift+C " ,        IDM_CHINESE
247         MENUITEM  " &English\tCtrl+Shift+D " ,      IDM_ENGLISH
248     END
249     POPUP  " &About "
250     BEGIN
251         MENUITEM  " Program &Information\tF1 " ,    IDM_INFO
252     END
253 END
254
255 #endif      //  English resources
256 /**/ /////////////////////////////////////////////////////////////////////////////
257
258
259
260 #ifndef APSTUDIO_INVOKED
261 /**/ /////////////////////////////////////////////////////////////////////////////
262 //
263 //  Generated from the TEXTINCLUDE 3 resource.
264 //
265
266
267 /**/ /////////////////////////////////////////////////////////////////////////////
268 #endif      //  not APSTUDIO_INVOKED
269
270


WinZJ.cpp
  1 //  资源就不释放了,系统自己回收。
  2
  3 #include  < Windows.h >
  4 #include  < string .h >
  5 #include  " resource.h "
  6
  7
  8 #define  STR_BUF_MAX  1024
  9
 10
 11 BOOL bCheck[  5  ]  =   0 } ;
 12 TCHAR szWndClassName[ STR_BUF_MAX ];
 13 HWND  hDlgLess  =  NULL;
 14 INT   iRadioSelector  =   0 ;
 15
 16
 17 LRESULT CALLBACK WndProc( HWND, UINT, WPARAM, LPARAM );
 18 INT_PTR CALLBACK DlgProc( HWND, UINT, WPARAM, LPARAM );
 19 BOOL  CALLBACK DlgLessProc( HWND, UINT, WPARAM, LPARAM );
 20
 21
 22 int  APIENTRY WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR lpCmdLine,  int  nCmdShow)  {
 23        LoadString( hInst, IDS_WNDCLASSNAME, szWndClassName, STR_BUF_MAX );
 24
 25        WNDCLASSEX wc;
 26        wc.cbClsExtra    = 0;
 27        wc.cbSize        = sizeof(wc);
 28        wc.cbWndExtra    = 0;
 29        wc.hbrBackground = (HBRUSH)::GetStockObject( WHITE_BRUSH );
 30        wc.hCursor       = NULL;
 31        wc.hIcon         = ::LoadIcon( hInst, MAKEINTRESOURCE(IDI_WINZJ) );
 32        wc.hIconSm       = ::LoadIcon( hInst, MAKEINTRESOURCE(IDI_WINZJ) );
 33        wc.hInstance     = hInst;
 34        wc.lpfnWndProc   = WndProc;
 35        wc.lpszClassName = szWndClassName;
 36        wc.lpszMenuName  = NULL;
 37        wc.style         = CS_HREDRAW | CS_VREDRAW;
 38
 39        ::RegisterClassEx( &wc );
 40
 41        HWND hWnd = ::CreateWindowEx( 0, szWndClassName, TEXT(""), 
 42                WS_OVERLAPPEDWINDOW, 
 43                100100800600
 44                NULL, NULL, wc.hInstance, NULL );
 45
 46        ::ShowWindow( hWnd,nCmdShow );
 47        ::UpdateWindow( hWnd );
 48
 49        HACCEL hAccel = ::LoadAccelerators( hInst, MAKEINTRESOURCE(IDA_WINZJ) );
 50        MSG msg;
 51        while ( ::GetMessage( &msg, NULL, 00 ) ) {
 52                if ( (::IsWindow(hDlgLess)) && (::IsDialogMessage(hDlgLess,&msg)) ) {
 53                        continue;
 54                }

 55                if ( ! ::TranslateAccelerator( hWnd, hAccel, &msg ) ) {
 56                        ::TranslateMessage( &msg );
 57                        ::DispatchMessage( &msg );
 58                }

 59        }

 60        return msg.wParam;
 61}

 62
 63
 64 LRESULT CALLBACK WndProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam )  {
 65        HDC hdc, hdcMem;
 66        PAINTSTRUCT ps;
 67        HMENU hMenu;
 68        RECT  rt;
 69        POINT pt;
 70        int i;
 71
 72        OPENFILENAME ofn;
 73        TCHAR szPath[ STR_BUF_MAX ], szFile[ STR_BUF_MAX ];
 74
 75        HBITMAP hbmpOld;
 76
 77        static HINSTANCE hInst;
 78        static INT iLangSelector;  // Base--Chinese,  0--Chinese,  1--English
 79        static HCURSOR hCursor[ 3 ];
 80        static INT iCursorSelector; // Base--Arrow, 0--Arrow, 1-Wait, 2--User
 81        static TCHAR szText[ STR_BUF_MAX ];
 82        static TCHAR szCursor[3][ STR_BUF_MAX ];
 83        static HBITMAP hBmp[ 5 ];
 84
 85        switch ( uMsg ) {
 86        case WM_CREATE : 
 87                hInst = ((LPCREATESTRUCT)lParam)->hInstance;
 88
 89                hCursor[ 0 ] = ::LoadCursor( NULL, IDC_ARROW );
 90                hCursor[ 1 ] = ::LoadCursor( NULL, IDC_WAIT );
 91                hCursor[ 2 ] = ::LoadCursor( hInst, MAKEINTRESOURCE(IDC_WINZJ) );
 92
 93                for ( i = IDB_A; i <= IDB_E; ++i ) {
 94                        hBmp[ i-IDB_A ] = ::LoadBitmap( hInst, MAKEINTRESOURCE(i) );
 95                }

 96
 97                ::LoadString( hInst, IDS_CURSOR_ARROW, szCursor[ 0 ], STR_BUF_MAX );
 98                ::LoadString( hInst, IDS_CURSOR_WAIT,  szCursor[ 1 ], STR_BUF_MAX );
 99
100                iCursorSelector = 0// arrow
101                ::SendMessage( hWnd, WM_COMMAND, IDM_CHINESE, 0 );
102                return 0;
103
104        case WM_PAINT : 
105                hdc = ::BeginPaint( hWnd, &ps );
106
107                ::LoadString( hInst, IDS_CURSOR_PREFIX_CH+iLangSelector, szText, STR_BUF_MAX );
108                lstrcat( szText, szCursor[iCursorSelector] );
109                ::TextOut( hdc, 5010, szText, lstrlen(szText) );
110
111                hdcMem = ::CreateCompatibleDC( hdc );
112
113                for ( i = 0; i < 5++i ) {
114                        if ( bCheck[ i ] ) {
115                                hbmpOld = (HBITMAP)::SelectObject( hdcMem, hBmp[ i ] );
116                                ::BitBlt( hdc, 50, i*110+50130110
117                                        hdcMem, 00, SRCCOPY );
118                                ::SelectObject( hdcMem, hbmpOld );
119                        }

120                }

121                hbmpOld = (HBITMAP)::SelectObject( hdcMem, hBmp[ iRadioSelector ] );
122                ::BitBlt( hdc, 200100130110
123                        hdcMem, 00, SRCCOPY );
124                ::SelectObject( hdcMem, hbmpOld );
125
126                ::DeleteDC( hdcMem );
127
128                ::EndPaint( hWnd, &ps );
129                return 0;
130
131        case WM_DESTROY : 
132                ::PostQuitMessage( 0 );
133                return 0;
134
135        case WM_SETCURSOR : 
136                ::GetClientRect( hWnd, &rt );
137                ::GetCursorPos( &pt );
138                ::ScreenToClient( hWnd, &pt );
139                if ( (rt.left<=pt.x) && (pt.x<rt.right) && (rt.top<=pt.y) && (pt.y<rt.bottom) ) {
140                        ::SetCursor( hCursor[ iCursorSelector ] );
141                        return 0;
142                }

143                break;
144
145        case WM_COMMAND : 
146                hMenu = ::GetMenu( hWnd );
147                switch ( LOWORD(wParam) ) {
148                case IDM_EXIT : 
149                        ::DestroyWindow( hWnd );
150                        return 0;
151
152                case IDM_MODAL : 
153                        if ( IDOK == ::DialogBox( hInst, MAKEINTRESOURCE(IDD_CHECK), hWnd, DlgProc ) ) {
154                                ::InvalidateRect( hWnd, NULL, TRUE );
155                        }

156                        return 0;
157                case IDM_MODALLESS : 
158                        if ( ! ::IsWindow( hDlgLess ) ) {
159                                hDlgLess = ::CreateDialog( hInst, MAKEINTRESOURCE(IDD_RADIO), hWnd, DlgLessProc );
160                                ::ShowWindow( hDlgLess, SW_SHOW );
161                        }

162                        return 0;
163                case IDM_FILE : 
164                        memset( &ofn, 0sizeof(ofn) );
165                        ofn.lStructSize = sizeof(ofn);
166                        ofn.hInstance  = hInst;
167                        ofn.hwndOwner = hWnd;
168                        ofn.lpstrFilter = TEXT("All Files(*.*)\0*.*\0Text Files(*.txt)\0*.txt\0C++ Files(*.cpp)\0*.cpp\0\0");
169                        ofn.lpstrTitle = TEXT("打开");
170                        lstrcpy( szFile, TEXT("") );
171                        ofn.lpstrFile = szFile;
172                        ofn.nMaxFile  = sizeof(szFile) / sizeof(TCHAR);
173                        ::GetCurrentDirectory( STR_BUF_MAX, szPath );
174                        ofn.lpstrInitialDir = szPath;
175                        ofn.Flags = OFN_EXPLORER | OFN_FILEMUSTEXIST;
176                        if ( ::GetOpenFileName( &ofn ) ) {
177                                ::MessageBox( hWnd, szFile, TEXT("文件名"), MB_OK );
178                        }

179                        return 0;
180
181                case IDM_ARROW : 
182                case IDM_WAIT : 
183                case IDM_USER : 
184                        iCursorSelector = (int)(LOWORD(wParam)) - (int)(IDM_ARROW);
185                        ::SetCursor( hCursor[ iCursorSelector ] );
186                        ::CheckMenuRadioItem( hMenu, IDM_ARROW, IDM_USER, IDM_ARROW+iCursorSelector, MF_BYCOMMAND );
187                        ::InvalidateRect( hWnd, NULL, TRUE );
188                        return 0;
189
190                case IDM_CHINESE : 
191                case IDM_ENGLISH : 
192                        iLangSelector = (int)(LOWORD(wParam)) - (int)(IDM_CHINESE);
193                        hMenu = ::LoadMenu( hInst, MAKEINTRESOURCE(IDM_WINZJ_CH+iLangSelector) );
194                        ::SetMenu( hWnd, hMenu );
195                        ::CheckMenuRadioItem( hMenu, IDM_CHINESE, IDM_ENGLISH, IDM_CHINESE+iLangSelector, MF_BYCOMMAND );
196                        ::LoadString( hInst, IDS_CURSOR_USER_CH+iLangSelector, szCursor[ 2 ], STR_BUF_MAX );
197                        ::LoadString( hInst, IDS_APPNAME_CH+iLangSelector, szText, STR_BUF_MAX );
198                        ::SetWindowText( hWnd, szText );
199                        ::SendMessage( hWnd, WM_COMMAND, IDM_ARROW+iCursorSelector, 0 );
200                        ::InvalidateRect( hWnd, NULL, TRUE );
201                        return 0;
202
203                case IDM_INFO : 
204                        ::MessageBox( hWnd, TEXT("第三次上机练习\n对话框,光标,字符串,位图\n\n学号:***********\n姓名:****\n"), TEXT("Lab3 ZJ"), MB_OK|MB_ICONINFORMATION );
205                        return 0;
206                }

207                break;
208        }

209        return ::DefWindowProc( hWnd, uMsg, wParam, lParam );
210}

211
212
213 INT_PTR CALLBACK DlgProc( HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam )  {
214        int i;
215        switch ( uMsg ) {
216        case WM_INITDIALOG : 
217                for ( i = IDC_CHECK1; i <= IDC_CHECK5; ++i ) {
218                        ::CheckDlgButton( hDlg, i, bCheck[ i-IDC_CHECK1 ] );
219                }

220                return TRUE;
221        case WM_COMMAND : 
222                switch ( LOWORD(wParam) ) {
223                case IDOK : 
224                        for ( i = IDC_CHECK1; i <= IDC_CHECK5; ++i ) {
225                                bCheck[ i-IDC_CHECK1 ] = ::IsDlgButtonChecked( hDlg, i );
226                        }

227                case IDCANCEL : 
228                        ::EndDialog( hDlg, LOWORD(wParam) );
229                        return TRUE;
230                }

231                break;
232        }

233        return FALSE;
234}

235
236
237 BOOL  CALLBACK DlgLessProc( HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam )  {
238        switch ( uMsg ) {
239        case WM_INITDIALOG : 
240                ::CheckRadioButton( hDlg, IDC_RADIO1, IDC_RADIO5, IDC_RADIO1+iRadioSelector );
241                return TRUE;
242        case WM_COMMAND : 
243                switch ( LOWORD(wParam) ) {
244                case IDOK : 
245                        iRadioSelector = 0;
246                        while ( ! ::IsDlgButtonChecked( hDlg, IDC_RADIO1+iRadioSelector ) ) {
247                                ++iRadioSelector;
248                        }

249                        ::InvalidateRect( ::GetParent(hDlg), NULL, TRUE );
250                        return TRUE;
251                case IDCANCEL : 
252                        ::DestroyWindow( hDlgLess );
253                        hDlgLess = NULL;
254                        return TRUE;
255                }

256                break;
257        }

258        return FALSE;
259}

260


你可能感兴趣的:(对话框,光标,字符串,位图——Windows编程上机作业之三)