MFC

Enterキー(Escキー)を押しても、ダイアログが閉じないようにするには

MFC

ダイアログのクラスのPreTranslateMessage関数で、VK_RETURN、VK_ESCAPEをキャッチし、CDialogの実装の処理が行なわれないようにします。 BOOL CXXXDialog::PreTranslateMessage(MSG* pMsg) { if( WM_KEYDOWN == pMsg->message ) { switch( pMsg->wParam ) {…

CMenuの項目を消すにはRemoveMenu

MFC

ID指定の場合 CMenu menu,*pPopup; VERIFY( menu.LoadMenu( IDR_TASKTRAY_MENU )); pPopup = menu.GetSubMenu( 0 ); pPopup->RemoveMenu(ID_MENU_ITEM1,MF_BYCOMMAND);何番目か指定の場合 pPopup->RemoveMenu(3,MF_BYPOSITION); ネタ元 https://msdn.microso…

CEditで複数行OKにする設定メモ

MFC

項目 値 意味 MultiLine True 複数行 Want Return True 改行したい(改行を許可) Auto HScroll False 水平自動スクロールせず Vertical Scroll True 垂直スクロールバー ネタ元 http://mail2.nara-edu.ac.jp/~asait/visual_cpp/dialog1/editbox2/editbox2.htm

CEditやCRichEditで最下方にスクロールする

MFC

スクロールバーにメッセージを送るスクロールバーの性質上、一番下にスクロールすると、最後の行がコントロールの一番下の位置に表示されるのです。 // 最終行が表示されるようにスクロールする edit.PostMessage(WM_VSCROLL, MAKELONG(SB_BOTTOM, NULL));ネ…

CEditで文字グレーにしないで編集不可にする

MFC

CEdit::SetReadOnly()で読取専用にする方法を使う背景白にはならないけど、文字がグレーにはならないから見やすいネタ元 http://rarara.cafe.coocan.jp/cgi-bin/lng/vc/vclng.cgi?print+200211/02110075.txt

CEditで65535文字の限界を超える

MFC

SetLimitText(0)すればOK CWnd* pWnd = dlg.GetDlgItem(nItemId); CEdit *edit = static_cast<CEdit*>(pWnd); //dynamic_cast does not work if(edit != 0) { UINT limit = edit->GetLimitText(); //The current text limit, in bytes, for this CEdit object. //val</cedit*>…

CRichEditCtrlを使うにはLoadLibrary()する必要あり

MFC

リソースエディタで普通に張るだけだと、DoModal()でなにもおきない。 起動時に m_hRichDll = LoadLibrary(_T("Riched20.dll"));終了時に FreeLibrary(m_hRichDll);ネタ元 http://www16.atpages.jp/rayna/Tips/richedit/index.html

CMapのループ

MFC

CMap<CString, LPCTSTR, CPerson*, CPerson*> myMap; CPerson myPerson; myMap.SetAt(_T("Bill"), &myPerson); POSITION pos = myMap.GetStartPosition(); while(pos != NULL) { CPerson* pPerson; CString string; // Get key (string) and value (pPerson) myMap.GetNextAssoc(pos, string, pPers</cstring,>…

ディレクトリ(フォルダ)をコピーする

実装方法としては、 ・ディレクトリの中のファイルをコピーする処理を作成する方法 ・シェル関数を用いる方法 の2つの実現実装方法があります。API版 BOOL CopyDirectory( LPCTSTR lpExistingDirectoryName, LPCTSTR lpNewDirectoryName ) { // 入力値チェ…

ファイルが更新されてるかどうかチェック

MFC

CTime g_Time; ... TCHAR tcFile[MAX_PATH] = _T("d:\log.txt"); CFileFind find; if(find.FindFile(tcFile)) { find.FindNextFile(); CTime updateTime; find.GetLastWriteTime(updateTime); find.Close(); if( g_Time.GetTime() == updateTime.GetTime() )…

(C++)現在のログインしてるユーザ名を取得する

Windows API の GetUserName関数 を使えばいいようです。 //現在のユーザ名取得 TCHAR user[1024]; DWORD dwUserSize; // 取得したユーザ名の文字列の長さ if ( ! GetUserName(user,&dwUserSize) ){ return -1; } MessageBox(NULL,user,_T("ユーザ名"),MB_OK…

メモリマップドファイルのサイズ変更のつもりでCloseHandle()してからCreateFileMappingしても同じ名前じゃ意味が無い

名前変えないと、結局前作ったハンドルが返ってくる。サイズも変わってない。プロセスを落とすまでそうなるらしい。 ひょっとして、同じ名前(今回の場合は、"MAPFILE")で 異なるサイズのオブジェクトを作成しようとしたりしていませんか?ネタ元 http://hp…

ファイルが残っているフォルダを削除

コツコツファイル消してからRemoveDirectory()が正攻法だとおもうけど、シェル関数を使うと楽。間違って大事なフォルダ消しちゃわないようにデバッグ時は要注意だよ。 BOOL DeleteDirectoryUseShellFunc( LPCTSTR lpPathName ) { // 入力値チェック if( NULL…

MessageBoxのはい/いいえ/キャンセルの文字を変更する

MFC

SetWindowsHookEx()/UnhookWindowsHookEx()を使ってフックして対応 ////////////////////////////////////////////////////////////////// // フックハンドル用の変数をグローバルで宣言する。 HHOOK MyHookHandle; // フックハンドル変数 // OKの文字列と、…

MFC アプリケーションを終了する方法

MFC

// same as double-clicking on main window close box ASSERT(AfxGetMainWnd() != NULL); AfxGetMainWnd()->SendMessage(WM_CLOSE);ネタ元 http://support.microsoft.com/kb/117320/ja

メッセージ送ってボタンを操作する

MFC

ボタンをプログラムからクリックするには BM_CLICK を使います これをボタンに送れば、ボタンは WM_LBUTTONDOWN と WM_LBUTTONUP メッセージを受け取りますBM_CLICK のパラメータは両方とも 0 です また、このメッセージに戻り値はありませんまた、プッシュ…

Windowsアプリで引数を受け取る

MFC

CString cmdParam( m_lpCmdLine );で取れるサンプル { // コマンドライン引数の取得 CString cmdParam( m_lpCmdLine ); cmdParam.Trim(); CStringArray cmdParams; // 引数を格納する動的配列 CString param; int curPos = 0; // パラメータの分解 cmdParam.…

CMapを高速に使うためには

初期サイズを定義する SetAtではなく[]を使う 不得意分野では使わない 単純にすべてを羅列するような使い方の場合はCMapではなく、CArrayなどを検討したほうがいいです。 ネタ元 http://www.mfc-programming.com/2010/etc/mfc248.html

CMAPの定義例

CMap< int, int, MY_STRUCT, MY_STRUCT& > myMap1;この例は MY_STRUCT 値を格納し、 int のキーにアクセスし、参照によって MY_STRUCT のアクセスされた項目を返します。 CMap< CString, LPCTSTR, CPerson, CPerson& > myMap2;この例では CPerson 値を格納し…

std:string(shiftjis/ansi)からCString(unicode)に変換する簡単な方法

CStringAに入れてからCStringに突っ込む。直変換するより、メモリや処理速度の効率は良くないと思うよ。 std:string str_sjis; str_sjis = "abc"; CStringA mess; mess.Format("%s",str_sjis.c_str()); CString mess2; mess2 = mess; AfxMessageBox(mess2);

vector以外の動的配列 CArray / CAtlArray

例えば128個の配列を確保するときそれぞれ次のようにコーディングすることができます。(この他にも方法はありますが) CArray < int > a; a.SetSize( 128 ); CAtlArray < int > b; b.SetCount( 128 );ネタ元 VC++、CArray、CAtlArray、vector、配列の違い | …

MFCでファイルの更新日付取得

[vc][mfc] CFileFind find; if(find.FindFile(tmpFilepath)) { find.FindNextFile(); CTime updateTime; find.GetLastWriteTime(updateTime); find.Close(); } ネタ元 http://oissu2.blog77.fc2.com/blog-entry-28.html

2次元配列のやりとりを考える

MFCつかったC++からVB.NETのDLL内のAPIとでやりとり調査中キーワード:マーシャリング http://homepage1.nifty.com/MADIA/vb/vb_bbs2/200309/200309_03090033.html http://msdn.microsoft.com/ja-jp/library/9b1fy41s.aspx http://rarara.cafe.coocan.jp/cgi…

C#で作成したクラスライブラリ(DLL)をMFCで利用する

[C#][VC][MFC]消えると困るのでコピペ MFC/C# – C#で作成したクラスライブラリをMFCで利用する 基本 COMを利用してMFCからC#のクラスを利用する C#側 [準備] 1.プロジェクトプロパティ>ビルド 「COM相互運用機能の登録」にチェックを入れる ※自分でregasmを…

C#で作成したクラスライブラリをMFCで利用する

[C#][MFC]これからやってみるのでメモ。うーん、COMとして利用するのか… なんか気持ち悪いけど仕方ないのかな MFC/C# - C#で作成したクラスライブラリをMFCで利用する ネタ元 http://d.hatena.ne.jp/nutzlos/20110623/1308829150 DLLには下記2種類があるら…

WinInet を使ってフォームの POST 要求をシミュレートする方法

MFC WinInet クラスを使用する場合 CString strHeaders = _T("Content-Type: application/x-www-form-urlencoded"); // URL-encoded form variables - // name = "John Doe", userid = "hithere", other = "P&Q" CString strFormData = _T("name=John+Doe&us…

CTimeで現在の日時

MFC

[MFC]CTime::GetCurrentTime()で取得する CTime cTime1; cTime1 = CTime::GetCurrentTime(); // 現在時刻 ネタ元 http://www.g-ishihara.com/mfc_tm_01.htm

ダイアログの画面更新とかにはUpdateWindow()

MFC

[MFC] ネタ元 http://okwave.jp/qa/q1724819.html

ダイアログ(CDialog)の返り値指定にはEndDialog()

[vc][mfc]EndDialog(1);ってやると、1が返るようになる ネタ元 http://www.crimson-systems.com/tips/t037g.htm

CreateDirectory()エラー時の詳細チェック方法(既にフォルダが存在する、など)

[vc][mfc]GetLastError()とInternetGetLastResponseInfo()を使うFTPサーバからのレスポンスがInternetGetLastResponseInfoで受け取る文字列に入るみたい if( !m_ftpConP->CreateDirectory(dirName) ){ long error_code = GetLastError(); if( error_code == …