DataGridViewを編集した時に、即座に反映させたい。

DataGridViewは、
チェックボックスやテキストボックスの内容を変更しても
フォーカスが変わらないと内部の変数に反映されない(CellValueChangedが発生しない)


DataGridViewで、CurrentCellDirtyStateChangedイベントを以下の通りにすると、

private: System::Void dataGridView1_CurrentCellDirtyStateChanged(System::Object^ sender, System::EventArgs^ e) {
DataGridView^ dgv = (DataGridView^)sender;
if ( dgv->IsCurrentCellDirty)
{
dgv->CommitEdit(DataGridViewDataErrorContexts::Commit);
}
}

チェックボックスやテキストボックスの内容が変わるとすぐに反映される(CellValueChangedが呼び出される)

画像回転後のサイズ取得

x1*y1の矩形をN度回転させる場合、収まる矩形幅はいくつかという計算
画像処理とかでたまにつかうね。

#define _USE_MATH_DEFINES
#include

/**
@brief 回転後のサイズ取得
@param destWidth [o] 回転後の幅
@param destHeight [o] 回転後の高さ
@param srcWidth [i] 回転前の幅
@param srcWidth [i] 回転前の高さ
@param degree [i] 回転角度(360度)
*/
void rotateTest( long* destWidth , long* destHeight , long srcWidth , long srcHeight , double degree );


void rotateTest( long* destWidth , long* destHeight , long srcWidth , long srcHeight , double degree )
{
float rad = M_PI / 180.0 * degree;
double _cos = cos( rad );
double _sin = sin( rad );
*destWidth = (long)(fabs( srcWidth*_cos )+fabs( srcHeight*_sin ) + 0.5 );
*destHeight = (long)(fabs( srcWidth*_sin )+fabs( srcHeight*_cos ) + 0.5 );
}

間違ってたらごめんね

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 に置換

構造体データエディタ

本格的に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配列。



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

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

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

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

ありがとうございます。

ダイアログに画像表示

リソースの方はたくさんあるけど、
外部ファイル情報があんまりなかったので、書いておく。


■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

CImage img;
外部ファイルのSave,Loadが出来て、
BitBltも搭載してるっぽい。