MFC

VC++/MFCで実行ファイルのパスを取得

MFC

// 実行ファイルのパスを取得 CString GetModulePath() { // 実行ファイルのパス CString modulePath = _T(""); // ドライブ名、ディレクトリ名、ファイル名、拡張子 wchar_t path[_MAX_PATH], drive[_MAX_PATH], dir[_MAX_PATH], fname[_MAX_PATH], ext[_MA…

VC++ MFCでディレクトリ内のファイル一覧を取得する

mfc

#include "atlpath.h" BOOL GetFileList(CString path,CStringArray* outArray) { // ファイル検索を開始します。 CFileFind fileFind; BOOL bResult = fileFind.FindFile(path); // ファイル検索ができない場合、終了します。 if (!bResult) return FALSE; …

VC++でブラウザコントロール

#include <windows.h> #include <tchar.h> #import <shdocvw.dll> #import <mshtml.tlb> int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) { HRESULT hr = ::CoInitialize(NULL); //COMを使うときのお約束 if (FAILED(hr)) { return -1; } NewIE(); //新</mshtml.tlb></shdocvw.dll></tchar.h></windows.h>…

MFCでIEじゃなくEdgeのコンポーネントを利用するサンプル

WebView2が使える。これでIEとおさらばできるかと思えば、ChroniumベースのEdgeがインストールされてる環境が前提。 お客さん向けに作るならChroniumベースのEdgeが使える環境/使えない環境を判断してコントロールを使う必要がありそうだ。ネタ元にはサンプ…

MFCで文字列分割 strtok的な

MFC

CAtlString strRows; CAtlString row; int curPos = 0; // 分割対象の文字列 // 最後に改行コードがあってもなくても構わない strRows = _T("row1\r\nrow2\r\nrow3\r\n"); //strRows = _T("row1\r\nrow2\r\nrow3"); // 最初の改行までの文字列を取り出す row…

MFCで日数の差分計算

MFC

COleDateTime nowdatetime = COleDateTime::GetCurrentTime(); COleDateTime predatetime(2020,4, 14,0,0,0); COleDateTimeSpan span(nowdatetime - predatetime); // 3日以内チェック if (span.GetTotalDays() <= 3) { ... } ネタ元 https://okwave.jp/qa/q…

CEditでSetWindowText()するとカーソル位置が変わっちゃう問題対策

MFC

int nLine = m_edt.GetFirstVisibleLine(); m_edt.SetWindowText(str); m_edt.LineScroll(nLine); ネタ元 https://rarara.org/community/programming/CEdit%E3%81%A7%E3%82%B9%E3%82%AF%E3%83%AD%E3%83%BC%E3%83%AB%E4%BD%8D%E7%BD%AE%E3%81%AE%E4%BF%9D%E6%…

MFCでボタン等の相対座標をもとめて移動させる

MFC

GetWindowRect()では絶対座標が取れるので そのままMoveWindow()するとどっか飛んでっちゃう。ScreenToClient()を使ってクライアント座標に変換しましょう。 POINT pt; RECT re; GetWindowRect(button_hWnd,&re); //ボタンの画面上の座標を取得 pt.x=re.left…

OutputDebugStringに書式指定版を作る

MFC

ヘッダで以下を定義 #ifdef OutputDebugString #undef OutputDebugString #endif #ifdef UNICODE #define OutputDebugString OutputDebugStringFW #define OutputDebugStringV OutputDebugStringFVW #else #define OutputDebugString OutputDebugStringFA #d…

MFC に XAML Islands で UWP のコントロールを追加する技を使い IEじゃないEdgeのコントロールを利用してみる試み

mfc

チャレンジ中BK4504 エラーがでるので以下をみて対策。これでいいのかな? "BSCMAKEエラーBK1500:内部エラー"を取り除く方法コンパイルエラー https://kotaeta.com/53804360 検索すると「Windows Community Toolkit 」をNuGetで導入・・・なんて解説がある…

MFCで強制的に日本時間(UTC+9)を取得

MFC

UTC時間取得して+9時間する COleDateTime dt; SYSTEMTIME stUTC{}; GetSystemTime(&stUTC); dt = stUTC; COleDateTimeSpan tsNis; tsNis.SetDateTimeSpan(0, 9, 0, 0); // +9 (日本時間に矯正) dt += tsNis;

MFCで日付の間隔取得

MFC

COleDateTime dt1( yyyy, mm, dd ); COleDateTime dt2( yyyy, mm, dd ); COleDateTimeSpan span( dt1 - dt2 ); printf( "%d 日間です", span.GetTotalDays() ); ネタ元 https://oshiete.goo.ne.jp/qa/649520.html

MFCでウインドウを最大化する

MFC

ShowWindow(SW_SHOWMAXIMIZED ) ネタ元 https://docs.microsoft.com/ja-jp/previous-versions/visualstudio/visual-studio-2010/72szh9c7(v=vs.100)

MFC フォームが最小化あるいは最大化されたことを知るには

MFC

OnSize()イベントで引数がOnSize(UINT nType, int cx, int cy) となるがnTypeがSIZE_MAXIMIZEDなら最大化されたと判定できる。 SIZE_MINIMIZEDなら最小化。 ネタ元 C#だけど https://dobon.net/vb/dotnet/form/minimized.html

VC++でファイルが読み込み専用か確認する

C VC MFC

long attr = GetFileAttributes(pFilename); if(attr != -1){ // ファイルがないと-1 if (FILE_ATTRIBUTE_READONLY == (attr & FILE_ATTRIBUTE_READONLY)) { CString mess; mess.Format("ファイルの書き込みに失敗しました。読み込み専用になっている可能性…

MFCのCDialogでEnterキー(Escキー)を押されたとき親ウィンドウに委ねる

BOOL CHogeChildDialog::PreTranslateMessage(MSG* pMsg) { if (pMsg->message == WM_KEYDOWN) { switch (pMsg->wParam) { case VK_RETURN: return FALSE; // 親にゆだねる case VK_ESCAPE: return FALSE; // 親にゆだねる default: break; } } return CDial…

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

MFC

PreTranslateMessage()追加して、以下記述 BOOL CXXXDialog::PreTranslateMessage(MSG* pMsg) { if( WM_KEYDOWN == pMsg->message ) { switch( pMsg->wParam ) { case VK_RETURN: return FALSE; case VK_ESCAPE: return FALSE; default: break; } } return C…

MFCで現在時間取得

MFC

多分203うん年問題含む CTime cTime = CTime::GetCurrentTime(); // 現在時刻 CString str = cTime.Format("%Y/%m/%d %H:%M:%S"); // "YYYY/mm/dd HH:MM:SS"形式の時刻文字列を取得 ネタ元 http://www.mfc-programming.com/2010/ctime/mfc30.html

MFCのCArray を qsort する

MFC

CArray の GetData メソッドで中身がまるまるもらえて、しかも中身書き換えてOKなのです。 struct StructHoge { int number; }; ... CArray <StructHoge, StructHoge> arrayHoge; ... // ソート関数 int compareHoge(void* context, const void* a1, const void* a2) { StructHoge* p</structhoge,>…

CStringAからCString もしくは unicode環境で std::string からCStringに変換

MFC

CStringのコンストラクタには char*(ANSI文字列) / wchar_T*(Unicode文字列)どちらも受け入れるようにコンストラクターが定義されています。なので CStringA strA( "123ほげ" ); CString str( _T("ファイル") ); std::string strstd("hoge"); CString st…

C++ MFC でタイムゾーン情報取得

MFC

TIME_ZONE_INFORMATION TzInfo; // タイムゾーン情報を取得 GetTimeZoneInformation( &TzInfo ); TzInfo.Bias に 分単位でずれ時間入ってる 日本時間だと -540 ネタ元 http://kwikwi.cocolog-nifty.com/blog/2006/01/bcb_utc_df21.html

MFCのコンボボックスで編集禁止にする方法

MFC

コンボボックスのプロパティのスタイルタブのタイプをドロップダウンリストにする ネタ元 http://rarara.cafe.coocan.jp/cgi-bin/lng/vc/vclng.cgi?print+200108/01080034.txt

コンボボックス CComboBox で選択指定

MFC

CComboBox::SetCurSel() ネタ元 https://msdn.microsoft.com/ja-jp/library/at7s2662.aspx

CListCtrlで選択されているアイテムを調べる

MFC

// CListCtrl m_ListCtrl int iSelected = m_ListCtrl.GetNextItem( -1, LVNI_SELECTED ); if( iSelected < 0 ){ // 選択されていない } ネタ元 https://mfcprogramming.wordpress.com/2010/11/01/clistctrl-%E9%81%B8%E6%8A%9E%E3%81%95%E3%82%8C%E3%81%A6%…

CListCtrlで選択行を設定する

MFC

m_ListCtrl.SetItemState(0,LVIS_SELECTED|LVIS_FOCUSED,LVIS_SELECTED|LVIS_FOCUSED); ネタ元 http://www.mfc-programming.com/2014/clistctrl/mfc585.html

CFileで読み込んだファイルデータにゴミが!! バッファ未初期化じゃない?

MFC

うっかり。 CString FileName="ファイル名"; char buff[10]; UpdateData(TRUE); CFile fin.Open(FileName,CFile::modeRead | CFile::typeBinary); fin.Read(buff,10); m_Edit=buff; UpdateData(FALSE); ネタ元 http://rarara.cafe.coocan.jp/cgi-bin/lng/vc/…

Jsonデータで受け取ったUTF8の文字列をSJIS変換

MFC

std::string data; wchar_t str2[512]; char str3[512]; ... picojson::object&obj = (*i).get<picojson::object>(); data = obj["text"].get<std::string>(); //UTF-8からShift-JISに変換(str3に格納) MultiByteToWideChar(CP_UTF8, 0, data.c_str(), strlen(data.c_str()) + 1, str2, MAX_</std::string></picojson::object>…

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 …