DataGridViewコントロールで行番号を表示

DataGridViewコントロールで行番号を表示するには?[2.0のみ、C#VB] − @IT
http://www.atmarkit.co.jp/fdotnet/dotnettips/506dgvlinenum/dgvlinenum.html

を C++/CLIで書いたのメモ

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
してた場合、
#define DrawText DrawTextA みたいなことになってるので
どこかで
#undef DrawText
やらないと駄目っぽい><


おまけ

第2回 DataGridViewコントロールでマインスイーパ − @IT
http://www.atmarkit.co.jp/fdotnet/vblab/gridlab_02/gridlab_02_01.html

正規表現

正規表現とは?
文字列の特定のパターンを指定する表記。で、そこの文字列の部分を抽出したり、置換できるの。
個人的には、htmlの部分(画像リンク)抽出や大量のテキストから要らない部分除去等に使ってる。
1日かけて勉強したら一生使えてる便利なやつ。


正規表現とは 【regular expression】 - 意味・解説 : IT用語辞典
 http://e-words.jp/w/E6ADA3E8A68FE8A1A8E78FBE.html
正規表現 - wikipedia
 http://ja.wikipedia.org/wiki/%E6%AD%A3%E8%A6%8F%E8%A1%A8%E7%8F%BE


■プログラムで使うには?
最近の言語はだいたい標準装備。
C++は、boostにあるでよ。
boost::regex
 http://www.s34.co.jp/cpptechdoc/article/regexpp/
boost
 http://www.boost.org/


■忘れやすいメモ

  • \を普通に書く

\\\\
\\\\が文字列の\\とみなされ正規表現で\になる場合があるので4つ。
\\の2個でいいのもあるかも。環境しだい?

  • ()で囲んだところ文字列取得

1個目()...\1
2個目()...\2
...
これも環境でちがうのあるかも。

                                                                                                                      • -

以下、書きかけ
■つかいそうなパターン


                                                                                                                      • -

■勝手にリンク
正規表現最新リンク集2005
 http://www2.famille.ne.jp/~akio1998/l_grep.html

2ch::過去スレのテンプレにあった参考サイトたち
Perlメモ
 http://www.din.or.jp/~ohzaki/perl.htm
正規表現メモ
 http://www.kt.rim.or.jp/~kbk/regex/regex.html
Regex::Diagram.pm
 http://www.cc.rim.or.jp/~midorin/mad-p/RegexDiagram.html
正規表現
 http://www.cc.rim.or.jp/~midorin/mad-p/perl/benkyou/PRC2kRegex/
UNIX正規表現入門
 http://web.archive.org/web/20021219021503/http://www01.u-page.so-net.ne.jp/jc4/hiroyuki/rex_index.html
Regular Expression(Riue ちゃんの正規表現講座)
 http://www.sixnine.net/regexp/

スタティックライブラリでエラー出た

C++/CLIでない、スタティックライブラリリンクしたら

DotNetTest2005_00 error LNK2020: 未解決のトークン (0A000013) exception.__ctor
DotNetTest2005_00 error LNK2020: 未解決のトークン (0A000030) exception.__dtor
DotNetTest2005_00 fatal error LNK1120: 外部参照 2 が未解決です。

こんなエラー出た。

コンパイルオプションでランタイムライブラリを
Debug: マルチスレッド デバッグ DLL(/MDd)
Release: マルチスレッド DLL(/MD)

に変更で直った。

windows.hなプログラムを利用する方法

stdafx.hとかに

#include
#pragma comment(lib, "user32.lib")
#pragma comment(lib, "gdi32.lib")

とか

で、

MessageBox( 0 , "test" , "caption" , MB_OK );

等が使える。

  • HWND取得

//丁寧にキャスト
HWND hWnd = reinterpret_cast(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

C++/CLIはじめました。

WindowsでのGUI作るのに
APIで最初から書くのは凄まじくめんどくさく、
MFCの痒いところに手が届かない所に嫌気がさし、
かといっても(業務や個人的趣味で)C++でやらないといけないのでC#は無理であり、
C++Builderは、更新してないので

せっかくだから、俺はこの.NET Frameworkを使うぜ。

つーわけで、勉強し始める。

用語

http://ja.wikipedia.org/wiki/C++/CLI
C++.NET Framework使うために拡張されたC++のことっぽい。
VC2005から対応
(String^ str)みたいな表記とかふえた

http://ja.wikipedia.org/wiki/CLR
Common Langage Runtime
.NET Frameworkのこと?