水無瀬の部屋 > Programming > sample > sendsend > select.cpp |
---|
1: //*********************************************************
2: // プロジェクト: Send to 'SendTo'
3: // ファイル名: select.cpp
4: //*********************************************************
5: #include "select.h"
6: #include "res.h"
7:
8:
9: //---------------------------------------------------------
10: // マクロ の 定義
11: //---------------------------------------------------------
12: #define PROP_DIALOGPARAM "PROP_DIALOGPARAM"
13:
14:
15: //---------------------------------------------------------
16: // ファイルスコープ関数 の 宣言
17: //---------------------------------------------------------
18: static INT_PTR CALLBACK SelectBoxProc( HWND, UINT, WPARAM, LPARAM );
19:
20:
21: //---------------------------------------------------------
22: // ファイルスコープ変数 の 定義
23: //---------------------------------------------------------
24: static const struct
25: {
26: DWORD flag;
27: int nID;
28: }
29: g_pair[] =
30: {
31: #define sendto_params( name ) { SENDTO_ ## name, IDC_EXE ## name }
32: sendto_params( STARTMENU ),
33: sendto_params( STARTUP ),
34: sendto_params( SENDTO ),
35: sendto_params( DESKTOPDIRECTORY ),
36: sendto_params( QUICKLAUNCH ),
37: #undef sendto_params
38: };
39:
40:
41: //*********************************************************
42: // SelectBox
43: //*********************************************************
44: bool
45: SelectBox
46: (
47: HWND hWnd,
48: SENDPARAM_t *info
49: )
50: {
51: // パラメタの仮定
52: ASSERT( IsValidPtr( info, sizeof( *info ) ) );
53:
54: HINSTANCE hInstance = GetModuleHandle( null );
55: return IDOK == DialogBoxPtrParam
56: (
57: hInstance,
58: MAKEINTRESOURCE( SELECT_BOX ),
59: hWnd,
60: SelectBoxProc,
61: info
62: );
63: }//SelectBox
64:
65:
66: //******************************************************************************************************************
67: // static
68: //******************************************************************************************************************
69: static INT_PTR OnSelectInitDialog( HWND hWnd, LPARAM lParam );
70: static INT_PTR OnSelectDestroy( HWND hWnd );
71: static INT_PTR OnSelectCommandOK( HWND hWnd );
72: static INT_PTR OnSelectCommand( HWND hWnd, WPARAM wParam );
73: static INT_PTR OnSelectHitTest( HWND hWnd, WPARAM wParam, LPARAM lParam );
74: static INT_PTR OnSelectSystemCommand( HWND hWnd, WPARAM wParam );
75: static INT_PTR OnSelectSystemCommandTopmost( HWND hWnd );
76: static INT_PTR OnSelectInitMenuPopup( HWND hWnd );
77:
78:
79: //*********************************************************
80: // SelectBoxProc
81: //*********************************************************
82: static
83: INT_PTR
84: CALLBACK
85: SelectBoxProc
86: (
87: HWND hWnd,
88: UINT uMsg,
89: WPARAM wParam,
90: LPARAM lParam
91: )
92: {
93: // パラメタの仮定
94: ASSERT( IsValidWindow( hWnd ) );
95:
96: switch( uMsg )
97: {
98: case WM_INITDIALOG: return OnSelectInitDialog( hWnd, lParam );
99: case WM_DESTROY: return OnSelectDestroy( hWnd );
100: case WM_COMMAND: return OnSelectCommand( hWnd, wParam );
101: case WM_SYSCOMMAND: return OnSelectSystemCommand( hWnd, wParam );
102: case WM_INITMENUPOPUP: return OnSelectInitMenuPopup( hWnd );
103: case WM_NCHITTEST: return OnSelectHitTest( hWnd, wParam, lParam );
104: default: return 0;
105: }
106: }//SelectBoxProc
107:
108: //*********************************************************
109: // OnSelectSystemCommand
110: //*********************************************************
111: static
112: INT_PTR
113: OnSelectSystemCommand
114: (
115: HWND hWnd,
116: WPARAM wParam
117: )
118: {
119: // パラメタの仮定
120: ASSERT( IsValidWindow( hWnd ) );
121:
122: switch( LOWORD(wParam) )
123: {
124: case IDM_TOPMOST: return OnSelectSystemCommandTopmost( hWnd );
125: default: return false;
126: }
127: }//OnSelectSystemCommand
128:
129: //*********************************************************
130: // OnSelectSystemCommandTopmost
131: //*********************************************************
132: static
133: INT_PTR
134: OnSelectSystemCommandTopmost
135: (
136: HWND hWnd
137: )
138: {
139: // パラメタの仮定
140: ASSERT( IsValidWindow( hWnd ) );
141:
142: const bool bTopmost = IsWindowTopmost( hWnd );
143: TopmostWindow( hWnd, !bTopmost );
144:
145: return true;
146: }//OnSelectSystemCommandTopmost
147:
148: //*********************************************************
149: // OnSelectCommand
150: //*********************************************************
151: static
152: INT_PTR
153: OnSelectCommand
154: (
155: HWND hWnd,
156: WPARAM wParam
157: )
158: {
159: // パラメタの仮定
160: ASSERT( IsValidWindow( hWnd ) );
161:
162: switch( LOWORD(wParam) )
163: {
164: case IDOK: return OnSelectCommandOK( hWnd );
165: case IDCANCEL: { VERIFY( EndDialog(hWnd, IDCANCEL) ); return true; }
166: default: return true;
167: }
168: }//OnSelectCommand
169:
170: //*********************************************************
171: // OnSelectInitDialog
172: //*********************************************************
173: static
174: INT_PTR
175: OnSelectInitDialog
176: (
177: HWND hWnd,
178: LPARAM lParam
179: )
180: {
181: // パラメタの仮定
182: ASSERT( IsValidWindow( hWnd ) );
183: ASSERT( IsValidPtr( (SENDPARAM_t *)lParam, sizeof(SENDPARAM_t) ) );
184:
185: // ダイアログの初期化
186: SENDPARAM_t *sp = (SENDPARAM_t *)lParam;
187: VERIFY( SetProp( hWnd, PROP_DIALOGPARAM, sp ) );
188: HINSTANCE hInstance = GetModuleHandle( null );
189: SetWindowIcon( hWnd, ICON_BIG, SHGetInstanceIcon(hInstance, SHGFI_LARGEICON) ); // 大きいアイコン
190: SetWindowIcon( hWnd, ICON_SMALL, SHGetInstanceIcon(hInstance, SHGFI_SMALLICON) ); // 小さいアイコン
191: WindowMoveToCursorPos( hWnd );
192:
193: // システム・メニューの初期化
194: HMENU hSysMenu = GetSystemMenu( hWnd, false );
195: const int pos = GetMenuItemPos( hSysMenu, SC_CLOSE );
196: if ( 0 <= pos )
197: {
198: InsertMenu( hSysMenu, pos, MF_SEPARATOR|MF_BYPOSITION, INVALID_MENUITEMID, null );
199: InsertMenu( hSysMenu, pos, MF_STRING|MF_BYPOSITION, IDM_TOPMOST, "常に最前面に表示(&T)" );
200: }
201:
202: // 各コントロールの初期化
203: // 登録先チェックボックスの初期化
204: {for( int i = 0; i < numof(g_pair); ++i )
205: {
206: CheckDlgButton( hWnd, g_pair[i].nID, (0 != (sp->flags & g_pair[i].flag)) ? BST_CHECKED : BST_UNCHECKED );
207: }}
208:
209: return true;
210: }//OnSelectInitDialog
211:
212: //*********************************************************
213: // OnSelectDestroy
214: //*********************************************************
215: static
216: INT_PTR
217: OnSelectDestroy
218: (
219: HWND hWnd
220: )
221: {
222: // パラメタの仮定
223: ASSERT( IsValidWindow( hWnd ) );
224:
225: VERIFY( RemoveProp( hWnd, PROP_DIALOGPARAM ) );
226: return true;
227: }//OnSelectDestroy
228:
229: //*********************************************************
230: // OnSelectCommandOK
231: //*********************************************************
232: static
233: INT_PTR
234: OnSelectCommandOK
235: (
236: HWND hWnd
237: )
238: {
239: // パラメタの仮定
240: ASSERT( IsValidWindow( hWnd ) );
241:
242: // オンになっている項目を取得
243: UINT flags = 0;
244: {for( int i = 0; i < numof(g_pair); ++i )
245: {
246: if ( BST_CHECKED == IsDlgButtonChecked(hWnd, g_pair[i].nID) )
247: {
248: flags |= g_pair[i].flag;
249: }
250: }}
251: SENDPARAM_t *sp = (SENDPARAM_t *)GetProp( hWnd, PROP_DIALOGPARAM );
252: sp->flags = flags;
253:
254: // 終了
255: VERIFY( EndDialog( hWnd, IDOK ) );
256: return true;
257: }//OnSelectCommandOK
258:
259: //*********************************************************
260: // OnSelectInitMenuPopup
261: //*********************************************************
262: static
263: INT_PTR
264: OnSelectInitMenuPopup
265: (
266: HWND hWnd
267: )
268: {
269: // パラメタの仮定
270: ASSERT( IsValidWindow( hWnd ) );
271:
272: // システム・メニュー
273: HMENU hSysMenu = GetSystemMenu( hWnd, false );
274: const bool bTopmost = IsWindowTopmost( hWnd );
275: Menu_CheckItem( hSysMenu, IDM_TOPMOST, MF_BYCOMMAND, bTopmost );
276:
277: return true;
278: }//OnSelectInitMenuPopup
279:
280: //*********************************************************
281: // OnSelectHitTest
282: //*********************************************************
283: static
284: INT_PTR
285: OnSelectHitTest
286: (
287: HWND hWnd,
288: WPARAM wParam,
289: LPARAM lParam
290: )
291: {
292: // パラメタの仮定
293: ASSERT( IsValidWindow( hWnd ) );
294:
295: LRESULT lResult = DefWindowProc( hWnd, WM_NCHITTEST, wParam, lParam );
296: SetWindowLongPtr64( hWnd, DWL_MSGRESULT, (HTCLIENT==lResult) ? HTCAPTION : lResult );
297: return true;
298: }//OnSelectHitTest
299:
300:
301: //** end **
302:
参照:
水無瀬の部屋 > sample > sendsend > select.cpp |
---|
このページは cpp2web が出力しました。
水無瀬 優 postmaster@katsura-kotonoha.sakura.ne.jp
http://katsura-kotonoha.sakura.ne.jp/prog/code/sendsend/select_cpp.shtml