VC

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

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

再録:VC++2010で設定すると楽なキーボード設定

VC

[VC]VC++2008でショートカット設定しておいたほうが便利な機能 定義へ移動 参照へ移動 ファイル.含んでいるフォルダを開く 設定はツール>オプション>環境>キーボードから。 [VC]VC++2008をVC++6っぽいキー操作に変える ツール>オプション>環境>キーボ…

Windows7にVisualC++6.0インストールは危なげな警告が出るけど可能

VC

インストール時に何度か『互換性に関する警告』が出ますけど構わず実行。ファイアーウォールの警告が出ても無視。新しいDLLが存在していると警告が出るけど、その時は新しいものをそのまま使うべし。 ネタ元 http://www9.plala.or.jp/oga/vc6.html

64bitプログラミング:マイクロソフトのVC++コンパイラはLLP64モデルである(int/longは32bitだけどポインタやlong longは64bit)

VC

wikipediaより http://ja.wikipedia.org/wiki/64%E3%83%93%E3%83%83%E3%83%88 ・・・ データモデルとしてLLP64がある。これは、ポインタと long long 型だけが64ビット幅になっているもので、int 型や long 型は32ビットのままである。 long long 型は一般に…

OSのバージョンを取得するには GetVersionEx()

VC

OSVERSIONINFO osVer; osVer.dwOSVersionInfoSize = sizeof( OSVERSIONINFO ); GetVersionEx(( LPOSVERSIONINFO ) & osVer ); switch( osVer.dwPlatformId ){ … } ネタ元 http://www.atmarkit.co.jp/fdotnet/dotnettips/553winver2deep/winver2deep.html

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

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(…

Visual C++ 2005/2008 再頒布可能ランタイムライブラリのサイレントインストール

VC

Visual C++ 2005 Sp1 再頒布可能ライブラリ http://blogs.msdn.com/b/astebner/archive/2007/02/07/update-regarding-silent-install-of-the-vc-8-0-runtime-vcredist-packages.aspx vcredist_x86.exe /q:a /c:”VCREDI~3.EXE /q:a /c:”"msiexec /i vcredist.…

ボタン上のテキスト色を取得 GetSysColor(COLOR_BTNTEXT)

VC

GetSysColor()で色々なシステム色を取得できるよ。 詳細 http://msdn.microsoft.com/ja-jp/library/cc429800.aspx

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

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

Visual C++ 2008でランタイム無しで実行可能なEXEファイルをコンパイルする方法

VC

VC++2008で普通にコンパイルして、使ってもらおうとすると「動かないよ」と言われます。 ランタイムがインストールされてないからですね。でもプロジェクトの設定次第でランタイムいらずになります。(出来上がったexeのサイズは少し大きくなるけど) [プロジ…

リンクエラーで出てくる_AFXDLL云々は、VC++6のプロジェクトを変換すると出てくるらしい

VC

ランタイムを使わないオプションにしてコンパイル/リンクをしようとしたら以下のようなエラーが出る場合があります。 fatal error C1189: #error : Please use the /MD switch for _AFXDLL builds本来_AFXDLLという定義はランタイムを利用するときにしか使わ…

VC++2008 マニフェストファイルの作成

VC

VC++2008では勝手に作られています。 普段はあんまり気にする必要はないです。 中身はただのXMLです。 プロジェクトのプロパティ>構成プロパティ>リンカ>マニフェストファイル でマニフェストファイルの設定が見れます。 マニフェストファイルの作成が「…

VC++2008で作ったプログラム(exe)を必要なランタイム(dll)と一緒に配布

VC

VC++2005/VC++2008ではside-by-side(サイドバイサイド)という仕組みがあります。これに則ってやらないといけません。配置 (C++)とりあえず、side-by-sideとか気にせず必要なランタイムモジュール付きでインストーラを作るなら VC++2008に付属のインストー…

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

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

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()でどうぞ

ボタンやスクロールバーなどのフレームコントロールを描画 DrawFrameControl()

VC

自前でコントロールを作るときに使う、標準のボタンやチェックボックス等を描くための関数。http://msdn.microsoft.com/ja-jp/library/cc428492.aspx ボタン描画時に最後の引数uStateに渡す値 メモ DFCS_BUTTONPUSH 通常ボタン DFCS_ADJUSTRECT 境界線無し D…

文字を書く DrawText()

VC

久々に使ったのでメモ。 最後の引数は DT_CENTER | DT_SINGLELINE | DT_VCENTER で左右上下のセンター合わせ http://msdn.microsoft.com/ja-jp/library/cc428474.aspx

背景を透過(透明)にする

VC

DrawText()などで描くテキストの背景を透明にしたりするとき使う SetBkMode(dc,TRANSPARENT); http://msdn.microsoft.com/ja-jp/library/cc410584.aspx

無効状態のテキスト表示

VC

VC6の場合。 COLORREF bk_color = GetTextColor(dc); SetTextColor(dc,GetSysColor(COLOR_GRAYTEXT)); // 淡色 DrawText(dc,....); SetTextColor(dc,bk_color); // 色戻す

InvalidateRect()とUpdateWindow()

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

VisualC++で並列プログラミング(OpenMP)を試してみた

VC

CodeZine - 基礎から学ぶOpenMP 第1回 - OpenMPの基礎構文 http://codezine.jp/article/detail/4693 OpenMPというのは共有メモリ並列プログラミングの標準 API 。VisualStudioでは2005から使えるらしい。 まずはHello World 環境はVC++2008。 新規プロジェク…

MAPファイルの出力をするには

VC

VC++6の話。プロジェクトの設定でリンクタブを選び MAPファイルを作成するというチェックボックスにチェック!

Visual C++ 2010に追加されたSTLアルゴリズム

サンプルコードがあってわかりやすい。 none_of, any_of, all_of find_if_not copy_if, copy_n partition_copy, is_partitioned, partition_point is_sorted, is_sorted_until is_heap, is_heap_until iotahttp://codezine.jp/article/detail/5206

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

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

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

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

LONGLONGを文字列に変換するには %I64d

VC

LONGLONG llData = 0x0000FFFFFFFFFFFF; CString strWork; strWork.Format( "Data = %I64d", llData ); // 10進 strWork.Format( "Data = %I64X", llData ); // 16進ネタ元 http://taiyonokumasan.blog47.fc2.com/blog-entry-15.html

msより細かいよ 高分解能パフォーマンスカウンタ QueryPerformanceCounter

VC

LARGE_INTEGER nFreq, nBefore, nAfter; DWORD dwTime; //変数の初期化 memset(&nFreq, 0x00, sizeof nFreq); memset(&nBefore, 0x00, sizeof nBefore); memset(&nAfter, 0x00, sizeof nAfter); dwTime = 0; QueryPerformanceFrequency(&nFreq); QueryPerfor…