VCTips

自ウィンドウのハンドル

this->m_hWnd

ラジオボタン、チェックボタンにチェックON/OFFする

CheckDlgButton()

ダイアログにメニュー追加

こんなん?いまいち不安だったりするが

 CMenu oMenu;
 oMenu.LoadMenu( IDR_MENU_MAIN );
 this->SetMenu( &oMenu );

ダイアログでファイル指定

GetOpenFileName()
GetSaveFileName()

でググれ

DLLを使う

7-zip32.dllを使った例

 hArcDll = ::LoadLibrary("7-zip32.dll");
 FARPROC f = ::GetProcAddress(hArcDll, "SevenZip");

 char ucMess[0xffff];
 ((SEVEN_ZIP)f)(this->m_hWnd,"a -tzip archive.zip *.bmp",ucMess,0xffff);

 FreeLibrary( hArcDll );

砂時計カーソル

  • 砂時計カーソルを表示
    • BeginWaitCursor();
  • もとのカーソルに戻す。
    • EndWaitCursor();

ダイアログ上のアイテムを使用不可にする

"::"を付けないとMFCを使ってるとエラーが出るみたい。

EnableWindow( ::GetDlgItem(this->m_hWnd,IDC_BUTTON_EXEC) , FALSE );

ダイアログアイテムのウインドウハンドル取得

GetDlgItem()

ダイアログ上のボタンON/OFF取得

BOOL bResult;
bResult = IsDlgButtonChecked( IDC_CHECK_xxxx );

ダイアログアイテムのテキスト情報取得(ワイド文字対応)

MSDNに載ってないので記す

GetDlgItemTextW(
    HWND hDlg,
    int nIDDlgItem,
    LPWSTR lpString,
    int nMaxCount);

Windowsに関連づいたソフトでファイルを開く

ShellExecute(NULL,"open",<ファイル名>,NULL,NULL,SW_SHOWNORMAL);

ダイアログのテキストボックス操作

SetDlgItemText(IDC_EDIT_xxxx,"ほげほげ");
SetDlgItemTextW(this->m_hWnd,IDC_EDIT_xxxx,L"ほげほげ");
GetDlgItemText(IDC_EDIT_xxxx,pBuffer);

フォルダ指定ダイアログを使う

 wstring wsResult = L""; 

 BROWSEINFO   bi;
 LPITEMIDLIST pidlRoot;   // ブラウズのルートPIDL
 LPITEMIDLIST pidlBrowse; // ユーザーが選択したPIDL
 LPMALLOC  lpMalloc = NULL;

 HRESULT hr = SHGetMalloc(&lpMalloc);
 if(FAILED(hr)){
  MessageBox("インターフェースポインタの取得に失敗しました。","エラー",MB_OK);
  return L"";
 }

 unsigned char lpBuffer[MAX_PATH];

 // ダイアログ表示時のルートフォルダのPIDLを取得
 SHGetSpecialFolderLocation(NULL,CSIDL_DESKTOP,&pidlRoot);

 // BROWSEINFO構造体の初期値設定
 // ※BROWSEINFO構造体の各メンバの詳細説明もヘルプを参照
 bi.hwndOwner = NULL;
 bi.pidlRoot = pidlRoot;
 bi.pszDisplayName = (char*)lpBuffer;
 bi.lpszTitle = "フォルダを選択して下さい";
 bi.ulFlags = 0;
 bi.lpfn = 0;
 bi.lParam = 0;

 // フォルダ選択ダイアログの表示 
 pidlBrowse = SHBrowseForFolder(&bi);
 if (pidlBrowse != NULL) {  
  // PIDL形式の戻り値のファイルシステムのパスに変換
  wchar_t wcBuffer[MAX_PATH];
  if (SHGetPathFromIDListW(pidlBrowse, wcBuffer)) {
   // 取得成功
   wsResult = wcBuffer;
   // SetDlgItemTextW(this->m_hWnd,IDC_EDIT_FONTPATH,wcBuffer); // テキストボックスに入力
  }else{
   MessageBox("フォルダの指定に失敗しました。","エラー",MB_OK);
  }
 }

 // クリーンアップ処理
 lpMalloc->Free(pidlRoot); 
 lpMalloc->Free(lpBuffer);
 lpMalloc->Release();

 return wsResult;