[PR]

水無瀬の部屋 > Programming > sample > sendsend > select.cpp
最終更新日: 2007/03/25

   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: 

参照:


Google
ご意見・ご感想をお聞かせ下さい。匿名で送信できます。

 * 返信が必要な場合には postmaster@katsura-kotonoha.sakura.ne.jp へ直接メールしてください。

水無瀬の部屋 > sample > sendsend > select.cpp

このページは cpp2web が出力しました。
水無瀬 優 postmaster@katsura-kotonoha.sakura.ne.jp
http://katsura-kotonoha.sakura.ne.jp/prog/code/sendsend/select_cpp.shtml
『新妻LOVELY×CATION』を応援しています!