MFC

StrToInt()のDouble版を手作りする

#include <string> ・・・ const double StrToDouble(CString& s) { return std::atof(s.GetBuffer(0)); }ネタ元 http://www.richelbilderbeek.nl/CppStrToDouble.htm</string>

ファイルの追記

MFC

CFile f(FILENAME,CFile::modeCreate | CFile::modeNoTruncate | CFile::modeWrite);として、 f.SeekToEnd()でファイルポインタを最後にもっていき。 その後、f.Write();

MFCでのメモリリークの検出方法

http://kkkon.hp.infoseek.co.jp/tips/MFC/MemoryLeak.shtml何番目にメモリを割り当てたかという番号が毎回同じ時、_CrtSetBreakAlloc()を使うと便利。追記:ページ消えちゃってたのでInternetArchiveから復刻 - MFCでのメモリリークの検出方法 MSDN HTMLヘ…

2038年対策

CTime クラスと CTimeSpan クラスは、 2038 年以降に対応できません。 それぞれ、 COleDateTime クラスと COleDateTimeSpan クラスに置き換えます。VC++6にはこのクラスがないみたい。 というかVisualStudio6自体が2038年には立ち上がらないそうなので、そも…

VC++6の CScrollBarのnMinPos/nMaxPosはshort(32,767以下)でなければいけない

MFC

最近のはnMinPos/nMaxPosの幅がMAXLONG(0x7fffffffffffffff) まで大丈夫のようですけど。ハマった。

別プロジェクトのリソースをコピーする

コピー先のプロジェクトを開いた状態で、「ファイル」メニューから「開く」を選択する。 コピー元のプロジェクトの「・・・・.rc」というファイルを開く。 リソースの画面が表示されるので、右クリックでドラックして移動/コピーする。 ネタ元 http://www13.o…

CString小文字変換はMakeLower()

大文字変換はMakeUpper();ネタ元 http://www.piao.jp/~yo-mk/Tips/cppLang1.html

フォルダ作成は CreateDirectory()

LPSECURITY_ATTRIBUTES lpSecurity; // セキュリティ記述子のアドレス lpSecurity = NULL; // デフォルトのセキュリティを使う if( CreateDirectory( "c:\\test", lpSecurity ) == FALSE ) { // 失敗 } ネタ元 http://homepage2.nifty.com/hdkt/vc_createdir…

フォルダの存在確認はPathFileExists

#include <shlwapi.h> // 要link shlwapi.lib CString path = _T("C:\\foo.bar"); if( ::PathFileExists( path ) && !::PathIsDirectory( path ) ){ // 指定されたパスにファイルが存在、かつディレクトリでない }else if( ::PathFileExists( path ) ){ // 指定されたパ</shlwapi.h>…

引数の取得

GetCommandLine()とか __argc、__argvを使います。ネタ元 http://rararahp.cool.ne.jp/cgi-bin/lng/vc/vclng.cgi?print+200408/04080046.txt

CScrollBarで SetScrollPos(pos) すぐ後に GetScrollPos() しても位置はまだ変わっていない

変数に値入れる感覚でいるとハマる。

スクロールバーを追加するときに追加しなくちゃいけないコード

VC++6。コードはあくまでサンプル。メンバ変数としてCScrollBarを追加 CScrollBar m_wndScrollLRresource.hにID追加 #define IDC_WNDSCROLLLR 7050汎用的なサイズ設定関数の作成。 ことあるごとに呼ぶことになる。 #define HSCROLLBAR_HIGHT (16) void ***::…

スクロールバー(CScrollBar)の独自設計するときはWndProcのオーバーライドで実装する

WndProcにさまざまなメッセージが流れてくるので、それを捕まえて独自処理する。VC++6でスクロールバーを独自描画したくてメッセージを見てみたけど、使えそうな物はなかった。しかたないから自力でスクロールバーもどき作るか・・・。ちなみに飛んでくるmes…

マウスがウィンドウから外に出て行ってしまったことを知るには_TrackMouseEvent()でWM_MOUSELEAVEを発行する

この API を用いると、マウスがウィンドウ外に出て行ったしまったとき、メッセージをもらうことができます。(ただし1回限定なので、また、必要になったら、また API をコールする必要があります。)ネタ元 http://www7.plala.or.jp/bunpan/htmldata/program/…

ファイル存在チェック CFileFind

指定されたファイル名のファイルが存在する場合にtrueを返す。 ただし、ディレクトリのパスが与えられた場合、ディレクトリが存在してもfalseを返す。 CFileFind find; CString filePath = _T("C:\\foo.bar"); if( find.FindFile( filePath ) ){ // ファイル…

CString 部分文字列

Mid()関数を使うよ

スクロールバー CScrollBar

SBS_HORZで水平スクロールバー CScrollBar bar; ・・・ int Test::OnCreate(LPCREATESTRUCT lpCreateStruct) bar.Create( SBS_HORZ , RECT( スクロールバーの座標 ) , this , <ユニークな数値> ); bar.SetScrollRange(0,255); // 幅設定 bar.ShowWindow( SW_…

COLORREF

こんな感じで作る COLORREF color = RGB(0, 0, 0);ネタ元 http://hp.vector.co.jp/authors/VA014436/prg_memo/windows/vcbasic/009.html

画像をちらつかせずに描画する

裏画面作成用のビットマップを用意して、書き終わったら一気に画像を転送するワザを使うべしネタ元 http://orangeknowledge.jpn.org/tips/mfc015.html

CFileFindを使ったファイル検索

void CFfindsapDlg::SearchFile(CString FName, CString FDir) { CFileFind FileFind; BOOL FndEndJug; //----------------------------- //検索ファイル名文字列を生成 CString strSearchFile = FDir + _T("\\") + FName; //---------------- //検索実行 if…

MFCのセマフォ CSemaphore クラス

http://msdn.microsoft.com/ja-jp/library/78w43c88%28VS.80%29.aspx使い方 ・・・ CSemaphore m_DrawSync; //ロックオブジェクト ・・・ void func(){ CSingleLock lock(&m_DrawSync); lock.Lock(); 〜処理〜 lock.Unlock(); ・・・ } ネタ元 http://www.ne…

タイマーの使い方

タイマイベントより、マルチメディアタイマーを使うと割り込みなのでより正確に測れるようですね。タイマー入門 - Visual C++ 6.0 編 #include <windows.h> #include <mmsystem.h> #pragma comment(lib,"winmm.lib") ・・・ void CALLBACK timerProc(UINT uTimerID, UINT uMsg, DWOR</mmsystem.h></windows.h>…

CEditコントロールで、一番下の行にスクロールする

m_edit.LineScroll(m_edit.GetLineCount()); // 一番下にスクロールネタ元 http://rararahp.cool.ne.jp/cgi-bin/lng/vc/vclng.cgi?print+200307/03070056.txt

ダイアログを閉じるとき、終了しますか?判定させる

OnClose()で if( IDOK == MessageBox("本当に終了しますか?","確認",MB_OKCANCEL) ){ CDialog::OnClose(); }

VC++6 タイマー処理は CWnd::SetTimer() と WM_TIMER

ダイアログ上で右クリック>イベントを選び、WM_TIMERを追加。 できたOnTimer()関数の中で定期的な処理を書く。OnInitDialog()とかで SetTimer(1,1000,0); とかやれば1秒おきにWM_TIMERイベントが発生します。 おまけ: WM_TIMERを任意で送るには PostMessage(…

MFCで現在の時間を得る VC++6

CTime timeNow = CTime::GetCurrentTime(); CString sTime = timeNow.Format("%Y%m%d%H%M%S");ネタ元 http://oshiete1.goo.ne.jp/qa949646.html

ボタンなどの文字列を変えるとき

CWnd::SetWindowText("新たなキャプション");

フォルダの存在を確認

PathFileExists( path ) と ::PathIsDirectory( path ) を使う。 #include <shlwapi.h> #pragma comment( lib, "shlwapi.lib" )が必要。ネタ元 http://kaede.blog.abk.nu/fileexistcheck http://msdev.blog.shinobi.jp/Entry/7/</shlwapi.h>

ボタンにBITMAPを貼り付ける(VC++6)

http://athomejp.com/goldfish/mfc/button/setbitmap.aspわざわざCBitmapクラス作ったり、面倒ですね。

リソースエディタでのドロップダウンリストの作り方(VC++6)

コンボボックスをダイアログに貼り付ける プロパティ:スタイルタブでタイプを標準にする 登録する項目の数以上に枠を広げる プロパティ:スタイルタブでタイプをドロップダウンリストにする テキストエディタで、項目を編集してコピー プロパティ:データタ…