MFC

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); ネタ元 www.alato.ne.jp atelier-peppe.jp

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…

MFCで一番簡単なマウス砂時計にする方法

宣言するだけ CWaitCursor wc;関数やスコープ抜けるところで元に戻る 簡単。ネタ元 http://park1.wakwak.com/~ima/visualcpp_tips0006.html

MFCでメニューにある自分の機能呼び出し

MFC

PostMessage (WM_COMMAND,ID_MENU_ITEM01);って感じ

MFCでutf-8のファイルから一行文字列読み取り

mfc

fopen()で開いて CStdioFile にポインタ渡して読み込む。 直CStdioFileで読むとShift-jisになっちゃう。 CString sPath; FILE *fp; errno_t ferr; ferr = _tfopen_s(&fp,_T("C:\\text.txt"), _T("r, ccs=UTF-8")); if( 0 == ferr ){ CStdioFile sFile(fp); s…