MFC

MFCで文字列の比較(アルファベット順とか)。CStringListにソートして格納例

CompareStringという関数がある。 CString input_string = "..."; // アルファベット順にソートして格納 POSITION tmp_pos = output_cstringlist.GetHeadPosition(); while( tmp_pos ){ POSITION bk_tmp_pos = tmp_pos; CString tmp_cstring = output_cstrin…

MFCのCFileDialogで複数のファイルを取得する

MFC

OFN_ALLOWMULTISELECTを設定すると複数のファイルが選択できるようになります。 しかし、これだけではたくさんファイルを選択すると不具合が発生します。 これはファイル名を受け取るバッファがデフォルトのままでは少ないため記憶できる限界を超えてしまう…

MFCでディレクトリ内の全てのファイルの取得する

MFC

/*-------------------------------------------------------------------------------/ 関数名:void FindAllFile(LPCTSTR pstrName, CListBox &listbox, BOOL bFolder) 引 数:pstrName 検索するファイルの名前が入っている文字列へのポインタ。 listbox …

MFCのCStringでフルパスからファイル名だけ取る

MFC

CString str = _T("C:\\aafafadfas\\hytgafsdfd\\fklwaetaf\\pickup.txt"); str = str.Right(str.GetLength()-str.ReverseFind(_T('\\'))-1); ネタ元 https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q12115067447

テンポラリ(一時)ファイル名を作る

MFC

TCHAR tmpDir[MAX_PATH]; GetTempPath(MAX_PATH, tmpDir); TCHAR tmpFilename[MAX_PATH]; GetTempFileName(tmpDir,"tmp",(UINT)pos,tmpFilename); ネタ元 https://msdn.microsoft.com/ja-jp/library/cc429354.aspx

MFC CArray を qsort する

MFC

struct StructHoge { int number; }; ・・・ CArray <StructHoge, StructHoge> arrayHoge; ・・・ int compareHoge(void* context, const void* a1, const void* a2) { StructHoge* p1 = (StructHoge*)a1; StructHoge* p2 = (StructHoge*)a2; if (p1->number != p2->number) { return</structhoge,>…

MFC エディットコントロールの高さを、文字列や横幅にあわせて自動的に変更する

MFC

GetWindowRect()で情報を得る void ChangeEdit2Height(){ // 文字列の取得 CString strBuff; int nstrLen = ce2.GetWindowTextLength() + 2; ce2.GetWindowText(strBuff.GetBuffer(nstrLen), nstrLen); strBuff.ReleaseBuffer(); // IDC_Edit2のサイズ変更 C…

CArrayのループ

MFC

シンプルにforループ for (int i = 0; i < array.GetSize(); i++) { str = str + array[i] + "\r\n"; } ネタ元 http://www7b.biglobe.ne.jp/~makandat/VC/Group17/CArray.htm

MFCラジオボタンの基本

リソースエディタでラジオボタンを配置する グループにしたいラジオボタンのうち、最初のタブオーダーのラジオボタンだけ「Group」をTrueにします。他はデフォルトのままでOK DDX変数を追加しましょう。グループの最初のラジオボタンを右クリックし、「変数…

MFC ウィンドウを常に手前に表示する

MFC

SetWindowPos() の第一引数に &wndTopMost を指定 SetWindowPos(&wndTopMost, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE|SWP_SHOWWINDOW); ネタ元 http://home.att.ne.jp/banana/akatsuki/doc/mfc/mfc02/index.html

MFC ダイアログ上のボタンを無効にする

MFC

CButton *button=(CButton*)GetDlgItem(IDC_BUTTON1); // 使用禁止 button->EnableWindow(FALSE); // 使用許可 button->EnableWindow(TRUE); ネタ元 http://rarara.cafe.coocan.jp/vc/vctips/button.htm

WinInetによるインターネット上ファイルの読み込みサンプル

MFC

超簡単サンプルです。ファイルの全部読み込みとか なーんもやってない。 { LPTSTR lpszBuf=(LPTSTR)GlobalAlloc(GPTR,1024); /* ハンドル作成 */ HINTERNET hInet=InternetOpen(_T("TEST"),INTERNET_OPEN_TYPE_DIRECT,NULL,NULL,0); /* URLオープン */ HINTE…

背景色を指定するにはSetBkColor()関数

MFC

SetBkColor(hdc , RGB(0xFF , 0 , 0));ネタ元 http://wisdom.sakura.ne.jp/system/winapi/win32/win21.html

MFC メモリデバイスコンテキストに文字列を出力

MFC

/************************************************* 関数名 DrawStringToHDC 機能 メモリデバイスコンテキストに文字列を出力 iXsize : 出力画像の幅(Width) iYpos : 縦方向の出力位置 *************************************************/ void DrawStrin…

MFC プログラムで画像を描いてイメージリストに追加するサンプル

MFC

// 日の丸を作成 // メモリ上にデバイス独立ビットマップを(DIB)作成する。 ZeroMemory(&bmp,sizeof(bmp)); bmp.bmiHeader.biSize=sizeof(BITMAPINFOHEADER); bmp.bmiHeader.biBitCount=32; bmp.bmiHeader.biPlanes=1; bmp.bmiHeader.biWidth=IMAGE_WIDTH; b…

MFCオリジナルのメッセージを受信する

MFC

#define WM_ORIGINALMSG WM_USER+1000って感じでメッセージ作るネタ元 http://i-hptetsu.programming.jp/archives/519

CLIstCtrlでドラッグ&ドロップする

MFC

まだ実装中。いいサンプルはこれ http://www50.tok2.com/home2/StillGreen/knowledge/program/listview.htm LVS_系のメッセージ受け取るにはSetExtendedStyleでLVS_REPORT指定してないとだめ https://msdn.microsoft.com/ja-jp/library/2hxsby1h.aspx ネタ元…

CMenuでメニュー項目の文字列を動的変更

MFC

SetMenuItemInfoで変更できます。 TCHAR buf[] = TEXT("新メニュー文字列"); MENUITEMINFO mii = { sizeof(mii) }; mii.fMask = MIIM_STRING; mii.dwTypeData = buf; pMenu->SetMenuItemInfo(2, &mii, TRUE);セパレータも意識して項目の順番指定してね。 Set…

MFCでキュー(FIFO)配列クラス作成

MFC

標準ではないので、CTypedPtrListを使って作るAddToEnd()で追加してGetFromFront()で取得。 // キュークラス // AddToEnd()にはnewしたオブジェクトを渡して // GetFromFront()した後はコール元でdeleteすること。 class CMyQueue : public CTypedPtrList< C…

EnableMenuItemでメニュー項目の有効/無効などの切り替えが効かない時はここを見れ

MFC

1.CFrameWndクラスのm_bAutoMenuEnableメンバがTRUEなってないかチェック2.BEGIN_MESSAGE_MAPの中にON_UPDATE_COMMAND_UIの指定が無いかチェック 上記があるといくら設定しても効きません。ネタ元 http://specialprovidence.at.webry.info/201007/article_72…

URLをブラウザで開く

mfc

ShellExecute()を使ってURL文字列をopenするだけ bool OpenUrl(LPCTSTR lpszUrl) { HINSTANCE hInst = ShellExecute(NULL,"open",lpszUrl,NULL,NULL,SW_SHOWNORMAL); if(hInst < (HINSTANCE)32){ // 32未満は起動に失敗 return false; } retuen true; } ネタ…

CFtpConnection::OpenFile()使うとメモリリークする

MFC

OpenFile()で受け取ったCInternetFileのポインタはClose()した後、deleteする必要あるみたいどこにもそんなん書いてないんだけどな。

CMapの速度テスト

MFC

適当にテスト。 当然ながらKeyがlongでInitHashTable()したやつがいっちゃん速かった。 Key:CStringと比べて数倍早い // Key:CStringでInitHashTable()なし // CString keyがループの中 { long tick = GetTickCount(); CMap<CString ,LPCTSTR,long,long& > mapdata; for(int i=0;i<1000000;</cstring>…

MFCでダイアログにポップアップメニューをつける方法

MFC

リソースエディタでメニュー作って以下のようなコードで呼び出す。 // "右クリック" void CMenuDlg::OnRButtonUp(UINT nFlags, CPoint point) { CMenu *popupMenuP = NULL; CMenu cMenu; int err = 0; // メニューをロード if (!err) if (!cMenu.LoadMenu(ID…

ON_NOTIFYで登録されてるアイテムにメッセージを飛ばす

MFC

ON_NOTIFY(LVN_ITEMCHANGED, ..., ...)で登録されている場合 NMHDR nmhdr; nmhdr.code = LVN_ITEMCHANGED; nmhdr.idFrom = controlId; nmhdr.hwndFrom = controlWindowHandle; SendMessage( targetWindowHandle, WM_NOTIFY, controlId, &nmhdr );ネタ元 http…

CListCtrlでアイテムをフォーカス&選択状態にする

MFC

SetItemState(nItem, // フォーカス&選択状態にしたいアイテムのインデックス LVIS_FOCUSED | LVIS_SELECTED, // 状態 LVIS_FOCUSED | LVIS_SELECTED); // マスクネタ元 http://rarara.cafe.coocan.jp/cgi-bin/lng/vc/vclng.cgi?print+200209/02090112.txt

mfcで画面を強制的に再描画させる方法

mfc

問答無用なら InvalidateRect(0,0,false); //画面全体に再描画を要求ウインドウハンドルしていすれば、そのアイテムだけ再描画するネタ元 http://okwave.jp/qa/q112210.html

CFile::Openでファイルオープン時にファイルが存在しないなら作成、するなら内容そのままにはmodeCreate | modeNoTruncate

MFC

modeCreateだけだと中身クリアされるよ CFile::modeCreate | CFile::modeNoTruncateネタ元 http://www.g-ishihara.com/mfc_fi_01.htm

MFCで数日前/数分前の日時計算

MFC

COleDateTime と COleDateTimeSpan を使います。 #include <afxdtctl.h> // MFC の Internet Explorer 4 コモン コントロール サポート int yy1,mm1,dd1; int yy2,mm2,dd2; int nNissuu; COleDateTime tsKjn(yy1,mm1,dd1,0,0,0); // 基準日 // COleDateTime tsKjn = COleDateTime::Ge</afxdtctl.h>…

CInternetFile::GetLength()は今読み込めるサイズが返ってくる!

MFC

MSDNには「ファイルのサイズを返します。」としか書いてないが、実は今読める分のサイズが返ってくるだけで、必ずしもファイルサイズを表してるわけではない。なので返ってくる値が0になるまで繰り返し読み込む必要がある CInternetFile *p_if_obj; p_if_obj…