MFC

CFileFindでファイルの存在チェック

[vc][mfc] ファイル単体の存在チェック CFileFind find; CString filePath = _T("C:\\foo.bar"); if( find.FindFile( filePath ) ){ // ファイルが存在 } フォルダ内ファイルの存在チェック 以下の例ではでファイル名の条件を指定。 CFileFind find; CString…

GetFtpConnection()で12014のエラーとなったら、なにか接続の設定がおかしい

[vc][mfc]引数の前後にスペースが混じっちゃってるとか、イージーミスの可能性大。 FTPの環境設定に誤りがあると考えられます。以下を確認してください。 FTPアカウント 性能情報出力画面のFTP環境設定により、運用管理サーバに登録されたアカウントが正しく…

FTPクライアントをMFCで作るなら CInternetSession CFtpConnection

[vc][mfc]メモ 典型的な FTP クライアント アプリケーションの作成手順 FTPクライアントを作る1 ↑開放処理が抜けてるコードなので注意。後始末はこうやる必要があるよ。 if (m_ftpConP){ m_ftpConP->Close(); delete m_ftpConP; m_ftpConP = NULL; } if (m_…

CListCtrl::DrawItem()での一番上のリストアイテムの描画位置が少し下にずれるというバグに対するスレ

MFC

悩み中。ぐぐったら同じ悩みがキャッシュにしか残ってなかったので復刻メモ。 [mfc 38519] CListCtrl::DrawItem()でのバグ 2002.03.07 いつも大変お世話になっております。 CListCtrlの派生クラスCListCtrlExを作ってオーナー描画を行っています。 このクラ…

コントロールにフォーカスが合っているかチェックするならGetState()

MFC

タブで移動してEnterという処理で使ったりする CButton *btn = (CButton*)this->GetDlgItem(IDC_BUTTON_SEARCH); if( btn->GetState() & 0x0008 ){ // フォーカス状態を調べます。0 以外の値のときは、ボタンにフォーカスがあることを示します。 //<フォーカ…

CStringの内容が全部数字かどうか確認する

MFC

// strにチェック前文字列が入っています。 CString res = str.SpanIncluding("0123456789"); if(res == str){ AfxMessageBox(_T("これは数字なり〜")); } ネタ元 http://blog.mylab.jp/20040831.html http://msdn.microsoft.com/ja-jp/library/2fhyz756(v=v…

ダイアログ ボックスにあるすべてのコントロールのタブ オーダーを変更するには書式メニューからタブ オーダー

MFC

[書式] メニューの [タブ オーダー] をクリックします。 各コントロールの左上隅にある番号は、現在のタブ オーダーでの位置を示します。 Tab キーに対応する順序で各コントロールをクリックして、タブ オーダーを設定します。 ネタ元 http://msdn.microsoft…

起動時、特定アイテムにフォーカスをあわせる

MFC

BOOL CStockSearchDialog::OnInitDialog() { CDialog::OnInitDialog(); // テキストボックスにフォーカスをあわせる CEdit* pEdit = (CEdit*)this->GetDlgItem(IDC_EDIT_QUERY); pEdit->SetFocus(); pEdit->SetSel(0, -1); return FALSE; return TRUE; // re…

CListViewのリスト内にある項目を検索して、その位置にカーソルをあわせる

MFC

リストをコントロールするにはGetListCtrl()でポインタGETして操作 long count= 0,item = 0; CListCtrl &cList = m_pList->GetListCtrl(); item = cList.GetNextItem(-1, LVNI_ALL|LVNI_SELECTED); while ( item != -1 ){ CTarget *target = ( CTarget * )m_…

指定したフォルダをエクスプローラで開く

MFC

ShellExecute()を使う。 例: ShellExecute(NULL, "open", csOutputFolderPath, NULL, NULL, SW_SHOWNORMAL);ネタ元 http://ist.mns.kyutech.ac.jp/fswiki/wiki.cgi?page=%BB%D8%C4%EA%A4%B7%A4%BF%A5%D5%A5%A9%A5%EB%A5%C0%A4%F2%A5%A8%A5%AF%A5%B9%A5%D7%A…

FillSolidRect を呼び出すと、以前に SetBkColor を使って設定した背景色も指定色になってしまう

ギャフン!指定変わっちゃうのかいな。やられた。 ネタ元 CDC::FillSolidRect

OnDestroy関数の呼ばれる順番は親−>子。つまり、OnDestroy 関数実行中は、まだすべての子ウィンドウが存在する

MFC

デバッガで追ってみたら、こうだったけどなぁ?間違ってるのかしら。親DestroyWindow() ↓ 子DestroyWindow() ↓ 子OnDestroy() ↓ 親OnDestroy()ネタ元 http://keicode.com/winprimer/wp15.php http://msdn.microsoft.com/ja-jp/library/2eahe3wf(v=vs.80).aspx

マウスが領域から離れた(WM_MOUSELEAVE)を受け取るには_TrackMouseEvent()が必要

MFC

_TrackMouseEvent()を使ってOnMouseLeave()に飛ぶように設定する。 Cソース BEGIN_MESSAGE_MAP(CImageButton, CButton) //{{AFX_MSG_MAP(CImageButton) … ON_MESSAGE(WM_MOUSELEAVE, OnMouseLeave) //}}AFX_MSG_MAP END_MESSAGE_MAP()void CImageButton::OnM…

リストビューコントロールの水平スクロールバーを常に非表示にするには?

ShowScrollBar()で消せるけど、OnPaint()等、描画のタイミングで常に指定しないと、また出てきちゃうよ ネタ元 http://hpcgi1.nifty.com/MADIA/Vcbbs/wwwlng.cgi?print+201008/10080015.txt

リストビューにスクロールバーが表示されているのか?表示されていないのか?を判定する方法

GetWindowLong()を使用すれば可能。 //リストビューハンドルを取る HWND hList = ::GetDlgItem(hDlg, IDC_LIST1); //リストビューハンドルのスタイルを取る const DWORD dwStyle = ::GetWindowLong(hList, GWL_STYLE); //以下の方法で確認できるようです if(…

ツールチップ(カーソル合わせると出る吹出しみたいな物)のクラス CToolTipCtrl

mfc

ツールヒントとも言うみたい。 CToolTipCtrl というクラスで簡単実装 ネタ元 ツールチップコントロールを表示させる

ボタンの色などを変えられるCButtonクラス拡張

ネタ元 http://7ujm.net/C++/CCButton.h.html このコードをみれば普通のボタンの描画手順が分かる。 ボタン部分の背景を塗りつぶして FillRect() 色はGetSysColor(COLOR_BTNFACE) テキストを描いて(無効なら無効色で描く) DrawText() ボタンの立体表現を描…

手動でWM_ERASEBKGNDをオーバーライドする

VC++6。MFC ClassWizardを使わない/使えない時に手動でやる方法。WM_ERASEBKGND以外のメッセージも同様。 ヘッダ(.h)の // 生成されたメッセージ マップ関数 というコメントがあるとこの //{{AFX_MSG(CTabWnd) と //}}AFX_MSG に囲まれた中に afx_msg …

CButtonの黒色の太い境界線を持たないようにする

MFC

OnPaint()など、描画前にやっとけばいいと思う CButton btn; … long style = btn.GetButtonStyle(); style &= ~BS_DEFPUSHBUTTON; btn.SetButtonStyle(style);

マウス(カーソル)の座標の取得

MFC

POINT point; GetCursorPos(&point); ScreenToClient(&point); ネタ元 http://www.game-create.com/archives/306

マウスがクライアント領域に入った/外れたを判別する

MFC

通常、クライアント領域から離れてしまえば、マウス関連のメッセージが飛んでこなくなるので、SetCapture()で捕まえておいて、外れるときにReleaseCapture()で解放する。 例: void CHogeButton::OnMouseMove(UINT nFlags, CPoint point) { CRect rect; GetCl…

CDialogでOnEraseBkgnd()を追加するには、クラス情報でメッセージフィルタを「ウィンドウ」にしてから、WM_ERASEBKGRNDの関数を追加する

MFC

背景のクリアを防ぎたいと思って、ClassWizardでWM_ERASEBKGRNDを追加しようとしても、見当たらない。 これはフィルタされているのが原因。ClassWizard を使わずに手書きしてもいいけど、ClassWizardでも使えるようにできる。 ClassWizard を開き、「クラス…

透過色指定でビットマップを描くときは TransparentBlt() を使うといい

MFC

VC2005だとCDCにTransparentBlt()関数が追加されたみたい。 哀しいかなVC6で作ることになってしまったら、BitBlt関数の代わりに msimg32.libをリンクして、::TransparentBlt()を使うといいです。ヘルプはこちら http://msdn.microsoft.com/ja-jp/library/c…

CButtonでボタンを自分で描画したい時は、DrawItem()をオーバーライド&Create()でBS_OWNERDRAWを付ける

オーバーライドしただけじゃ自前DrawItem()が呼ばれないので注意。 ネタ元 http://www12.ocn.ne.jp/~wildcat/program/custombtn1/custombutton1.html http://wisdom.sakura.ne.jp/system/winapi/win32/win61.html

CButtonのDrawItem()をオーバーライドしたときにくる引数lpDrawItemStructの使い方

引数 LPDRAWITEMSTRUCT lpDrawItemStructの itemStateにはOwner draw stateが入っている。 つまりODS_SELECTED / ODS_GRAYED / ODS_DISABLED とか。 http://lhsp.s206.xrea.com/misc/ownerdraw.html dcは CDC *dc = CDC::FromHandle(lpDrawItemStruct->hDC);…

CButtonの文字(キャプション)操作

SetWindowText()/GetWindowText()でどうぞ

InvalidateRect()とUpdateWindow()

画面更新を行うときに使う。どちらでもWM_PAINTが呼ばれるみたい。

VisualC++のクセに悩んでしまう人には「テクニカルレシピ」

MFC

初級から中級までの道のりが簡潔に紹介されてます。http://t-recipe.com/index.html

CFileDialogを使って複数のファイルを取得する処理で、いっぱいファイルを選んだらなぜかIDOKが返ってこないときはファイル名を受け取るバッファが足りないんだよ

MFC

データメンバのm_ofn(OPENFILENAME構造体)のlpstrFileに ファイル名を保存するバッファのアドレスを新しく割り当ててやります。 この時、用意したバッファの内容が0で埋め尽くされていないとエラーが発生するので 割り当てる前に初期化する必要があります。 …

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

MFC

OFN_ALLOWMULTISELECTを設定するhttp://akky.cjb.net/mfc/manyfile.html