Hatena::ブログ(Diary)

ProgramNote

2008/12/16

[]DocumentView形式のアプリ作成メモ


Q.Serialize(CArchive& ar)ってなんだお!

俺は、ファイル名の文字列くれたら自分で処理するお!

A.

CDocument::OnOpenDocument(LPCTSTR lpszPathName)

CDocument::OnSaveDocument(LPCTSTR lpszPathName)

オーバーライドすれ



Q.スタティックライブラリMFCを使うと、部分的に英語メッセージになります><

A.

BUG:: 予期しないリソース言語の変更使用〜

http://support.microsoft.com/kb/832187/ja

.rcファイル

afxres.rc を l.jpn\\afxres.rc に置換

afxprint.rc を l.jpn\\afxprint.rc に置換

2008/12/11

[]構造データエディタ

本格的にMFC使い続けて5年ぐらい立つけど、今頃気づいた。

ダイアログのUpdateDataの更新する変数

構造体そのままいけるやん。

●ヘッダ

//適当構造

struct Action{

int nTime;

char pName[200];

};

class CXXXDlg{

Action m_act;

●DoDataExchange部分(メッセージクラッカー?)

DDX_Text(pDX, IDC_EDIT_TIME, m_act.nTime ); // 数値

DDX_Text(pDX, IDC_EDIT_NAME, m_act.pName , 200 ); // 文字列

文字列は、std::string無理なので、char配列



構造体の内容そのままエディタがお手軽に作れる。

今まで代入してた俺涙目;;

2008/08/25 doxygenでchm出力した時のメニューの文字化け

[]doxygenでヘルプファイル

HTML Help Workshopでchmを出力する時

左側のメニューが文字化けしていたが、

index.hhcをSJISに変換して出力したらなおった。


■関連リンク

Let’s use doxygen!

http://www.fides.dti.ne.jp/~oka-t/doxygen.html

doxygenメモ

http://hp.vector.co.jp/authors/VA014436/prg_memo/tools/t002.html


コスミー報告書[社外秘] - Doxygenでヘルプファイルを作りたいんだけど

http://red-treasure.com/report/?p=192

2008/07/04 CLIでstaticな変数を含むlibrary

[]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のダイアログに画像表示

[] ダイアログ画像表示

リソースの方はたくさんあるけど、

外部ファイル情報があんまりなかったので、書いておく。


■Picture Controlをつかう

リソースエディタでPicture Controlを設置

IDをIDC_STATIC_BMPに

・Typeをビットマップ

ソース

//グローバルかクラスメンバに入れておく

CBitmap 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

[]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 <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

[]正規表現

正規表現とは?

文字列の特定のパターンを指定する表記。で、そこの文字列の部分を抽出したり、置換できるの。

個人的には、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/

2007/10/01

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

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)

に変更で直った。

2007/09/30

[]CEDEC2007

3ds maxがコア部分にC++/CLI使ってるみたい。

プラグインC++/CLI形式っぽい。

C++で、.NETなんて棘の道かと思ったけどそうでもなかったっぽい。

2007/09/02

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

stdafx.hとかに

#include <windows.h>

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

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

とか

で、

::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