2008/12/16
2008/12/11
2008/08/25 doxygenでchm出力した時のメニューの文字化け
2008/07/04 CLIでstaticな変数を含むlibrary
■[C++/CLI]CLIでstaticな変数を含むlibrary
自作のライブラリをリンクしてみたら
dbgheap.c 1414 でASSERT出た><。
おそらくライブラリの中、singletonいっぱいなのでstaticな変数やらが引っ掛かってる予感。
●対策方法
プロジェクトのプロパティ→[リンカ]→[詳細]のエントリポイントを
mainから
?mainCRTStartupStrArray@@$$FYMHP$01AP$AAVString@System@@@Z
に変更すればいいみたい。
参考
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=35641&forum=7
http://www.page.sannet.ne.jp/hirasho/diary/diary0707.html#1p8
ありがとうございます。
2008/06/05 MFCのダイアログに画像表示
■[MFC] ダイアログに画像表示
リソースの方はたくさんあるけど、
■Picture Controlをつかう
・IDをIDC_STATIC_BMPに
↓ソース
//グローバルかクラスメンバに入れておく
bmp.Attach( (HBITMAP)::LoadImage(AfxGetInstanceHandle(), "test.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE) );
CStatic* pictbox = (CStatic*)GetDlgItem(IDC_STATIC_BMP);
pictbox->SetBitmap(bmp);
で描画。
LoadImageで、画像サイズ指定できる(拡大縮小)
ピクチャーコントロールに関連付けされてるので、
一度呼べばいいっぽい。(OnPaintに記述する必要なし
■CImageを使う版
VC7から追加されたっぽい。
#include <atlimage.h>
CImage img;
外部ファイルのSave,Loadが出来て、
BitBltも搭載してるっぽい。
2008/03/06
■[C++/CLI]DataGridViewコントロールで行番号を表示
DataGridViewコントロールで行番号を表示するには?[2.0のみ、C#、VB] − @IT
http://www.atmarkit.co.jp/fdotnet/dotnettips/506dgvlinenum/dgvlinenum.html
private: System::Void dataGridView1_RowPostPaint(System::Object^ sender, System::Windows::Forms::DataGridViewRowPostPaintEventArgs^ e)
{
DataGridView^ dgv = (DataGridView^)sender;
// 行ヘッダのセル領域を、行番号を描画する長方形とする
// (ただし右端に4ドットのすき間を空ける)
System::Drawing::Rectangle rect = System::Drawing::Rectangle(
e->RowBounds.Location.X,
e->RowBounds.Location.Y,
dgv->RowHeadersWidth - 4,
e->RowBounds.Height);
// 上記の長方形内に行番号を縦方向中央&右詰めで描画する
// フォントや前景色は行ヘッダの既定値を使用する
TextRenderer::DrawText(
e->Graphics,
(e->RowIndex + 1).ToString(),
dgv->RowHeadersDefaultCellStyle->Font,
rect,
dgv->RowHeadersDefaultCellStyle->ForeColor,
TextFormatFlags::VerticalCenter | TextFormatFlags::Right);
}
#include <windows.h>
してた場合、
#define DrawText DrawTextA みたいなことになってるので
どこかで
#undef DrawText
やらないと駄目っぽい><
おまけ
第2回 DataGridViewコントロールでマインスイーパ − @IT
http://www.atmarkit.co.jp/fdotnet/vblab/gridlab_02/gridlab_02_01.html
2007/11/01
■[note]正規表現
■正規表現とは?
文字列の特定のパターンを指定する表記。で、そこの文字列の部分を抽出したり、置換できるの。
個人的には、htmlの部分(画像リンク)抽出や大量のテキストから要らない部分除去等に使ってる。
1日かけて勉強したら一生使えてる便利なやつ。
正規表現とは 【regular expression】 - 意味・解説 : IT用語辞典
http://e-words.jp/w/E6ADA3E8A68FE8A1A8E78FBE.html
http://ja.wikipedia.org/wiki/%E6%AD%A3%E8%A6%8F%E8%A1%A8%E7%8F%BE
■プログラムで使うには?
http://www.s34.co.jp/cpptechdoc/article/regexpp/
■忘れやすいメモ
- \を普通に書く
\\\\
\\\\が文字列の\\とみなされ正規表現で\になる場合があるので4つ。
\\の2個でいいのもあるかも。環境しだい?
- ()で囲んだところ文字列取得
1個目()...\1
2個目()...\2
...
これも環境でちがうのあるかも。
------------------------------------------------------------
以下、書きかけ
■つかいそうなパターン
------------------------------------------------------------
http://www2.famille.ne.jp/~akio1998/l_grep.html
http://www.din.or.jp/~ohzaki/perl.htm
http://www.kt.rim.or.jp/~kbk/regex/regex.html
http://www.cc.rim.or.jp/~midorin/mad-p/RegexDiagram.html
http://www.cc.rim.or.jp/~midorin/mad-p/perl/benkyou/PRC2kRegex/
Regular Expression(Riue ちゃんの正規表現講座)
2007/10/01
2007/09/02
■[C++/CLI]windows.hなプログラムを利用する方法
stdafx.hとかに
#include <windows.h>
とか
で、
::MessageBox( 0 , "test" , "caption" , MB_OK );
等が使える。
- HWND取得
//丁寧にキャスト
HWND hWnd = reinterpret_cast<HWND>(this->Handle.ToPointer());
//てきとうにキャスト
HWND hWnd = (HWND)this->Handle.ToPointer();
- HDC取得
・Paintイベントの時
private: System::Void Form1_Paint(System::Object^ sender, System::Windows::Forms::PaintEventArgs^ e)
{
HDC hdc = (HDC)(e->Graphics->GetHdc().ToPointer());
...
e->Graphics->ReleaseHdc((System::IntPtr)hdc);
}
まあ、
HWND取れれば、GetDC/ReleaseDCできるじゃん。
関連スレ
http://hpcgi1.nifty.com/MADIA/Vcbbs/wwwlng.cgi?print+200601/06010032.txt
