プログラムからメニューを追加する

  グローバル変数

  
HMENU hMenu;
HMENU hMenuPopup = NULL;
char ToolAction[10][80];
  



  ini ファイルよりメニューデータを読込んでメニュー作成



  
// ------------------------------------------------------------------
// ini ファイル読込
// ------------------------------------------------------------------
	GetIniFileName( buffer, _MAX_PATH );
	int left,top,right,bottom;
	left = GetPrivateProfileInt("Window", "Left", 0, buffer );
	top = GetPrivateProfileInt("Window", "Top", 0, buffer );
	right = GetPrivateProfileInt("Window", "Right", 0, buffer );
	bottom = GetPrivateProfileInt("Window", "Bottom", 0, buffer );
	MoveWindow( hWnd, left, top, right-left, bottom-top, false );

// ------------------------------------------------------------------
// ツールメニュー作成
// ------------------------------------------------------------------
	hMenu = GetMenu( hWnd );			// メインのメニューハンドルを取得
	GetPrivateProfileString("ToolMenu", "1", "NOTHING", work, 80, buffer );		// iniファイル
	if ( lstrcmp( work, "NOTHING" ) != 0 ) {		// ツールメニューデータがある場合

		hMenuPopup = CreatePopupMenu();	// ポップアップメニュー作成

		int i = 1000;			// ツールメニュー項目IDオフセット
		char count[10];			// メニューエントリ文字列用
		char *ptr,*ptr2;			// メニューデータ分解時の先頭アドレス

		ptr = strtok( work, "," );		// メニューデータ分解
		ptr2 = strtok( NULL, "," );		// メニューデータ分解
		lstrcpy( ToolAction[i-1000], ptr2 );	// 実行ファイル文字列
		AppendMenu( hMenuPopup, MF_ENABLED, IDM_OPENFILE+i, ptr );	// メニュー項目追加

		while( 1 ) {
			sprintf( count, "%d", i-998 );
			GetPrivateProfileString("ToolMenu", count, "NOTHING", work, 80, buffer );
			if ( lstrcmp( work, "NOTHING" ) == 0 ) {
				break;
			}
			i++;
			if ( i > 2009 ) {
				break;
			}
			ptr = strtok( work, "," );
			ptr2 = strtok( NULL, "," );
			lstrcpy( ToolAction[i-1000], ptr2 );
			AppendMenu( hMenuPopup, MF_ENABLED, IDM_OPENFILE+i, work );
		}

		MENUITEMINFO mii;
		mii.cbSize = sizeof(mii);
		mii.fMask = MIIM_TYPE | MIIM_STATE | MIIM_ID | MIIM_SUBMENU;
		mii.fType = MFT_STRING;
		mii.fState = MF_ENABLED;
		mii.wID = IDM_OPENFILE+999;
		mii.hSubMenu = hMenuPopup;
		mii.dwTypeData = "ツール(&T)";
		InsertMenuItem(hMenu, 2, TRUE, &mii);		// ポップアップメニュー追加
	}
	buffer[0] = 0x00;
  



  ポップアップメニュー削除

  
case WM_DESTROY:
	if ( !IsIconic( hWnd ) && !IsZoomed( hWnd ) ) {
		GetWindowRect(hWnd, &rt);
		GetIniFileName( buffer, _MAX_PATH );
		sprintf( work, "%d", rt.left );
		WritePrivateProfileString("Window", "Left", work, buffer );
		sprintf( work, "%d", rt.top );
		WritePrivateProfileString("Window", "Top", work, buffer );
		sprintf( work, "%d", rt.right );
		WritePrivateProfileString("Window", "Right", work, buffer );
		sprintf( work, "%d", rt.bottom );
		WritePrivateProfileString("Window", "Bottom", work, buffer );
	}
	if ( hMenuPopup != NULL ) {
		DestroyMenu( hMenuPopup );		// ポップアップメニュー削除
	}
	PostQuitMessage( 0 );
	break;
  



  メニュー内容の実行

  
wmId    = LOWORD(wParam); 
wmEvent = HIWORD(wParam); 

// ------------------------------------------------------------------
// ツールの起動
// ------------------------------------------------------------------
for ( i = 0; i < 10; i++ ) {
	if ( IDM_OPENFILE+i+1000 == wmId ) {

		ZeroMemory( &pi , sizeof(PROCESS_INFORMATION)); 
		ZeroMemory( &si , sizeof(STARTUPINFO));
		si.cb		= sizeof(STARTUPINFO);
		si.dwFlags	= STARTF_USESHOWWINDOW;
		si.wShowWindow	= SW_SHOWNORMAL;

		CreateProcess( NULL, ToolAction[i], NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi);
		return 0;
	}
}
  










  infoboard   管理者用   
このエントリーをはてなブックマークに追加





フリーフォントWEBサービス
SQLの窓WEBサービス

SQLの窓フリーソフト

素材

一般WEBツールリンク

SQLの窓

フリーソフト

JSライブラリ