CColorDialog()の実装について – プログラミング – Home

CColorDialog()の実装につ...
 
通知
すべてクリア

CColorDialog()の実装について


vassili
 vassili
(@vassili)
ゲスト
結合: 23年前
投稿: 2
Topic starter  

初めまして.
VC++で検索していたら,こちらにたどり着きました.

質問ですが,現在VC++6.0(SP5/WinXP Pro)でエディタ(CEditView/SDI)を
作成しているのですが,カラーダイアログの実装がうまくいきません.
文字色を変更しようとすると,Debug Assertion Failed!!と
エラーがでた後で[エラーを無視]するとカラーが変更されます.
プロジェクトの名前をEDIT1とすると,コードは以下の通りです.

Edit1View.cpp
/////////////m_ed2はCEditView型
void CEdit1View::OnViewColor()
{
CColorDialog myDlg(m_Text);
if (myDlg.DoModal() == IDOK){
m_Text = myDlg.GetColor();
m_ed2.Invalidate(TRUE);
}
m_ed2.SetFocus();
}

///////////m_Text(文字色/COLORREF型)はCEdit1View::CEdit1View()で
//////////でデフォルトカラーを設定.
HBRUSH CEdit1View::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CEditView::OnCtlColor(pDC, pWnd, nCtlColor);

// TODO: この位置で… if (nCtlColor == CTLCOLOR_EDIT){
if (pWnd == &m_ed2){
pDC->SetTextColor(m_Text);
}
}
// TODO: デフォルトのブラ…
return hbr;
}


引用解決済
トピックタグ
CdS
 CdS
(@CdS)
ゲスト
結合: 24年前
投稿: 176
 

どの時点でASSERTが出るのでしょう?
ソース名と行番号が書いてあるはずなので、それをもとに原因を探りましょう。

なんとなくm_ed2が怪しそうですが...。


返信引用
vassili
 vassili
(@vassili)
ゲスト
結合: 23年前
投稿: 2
Topic starter  

CdSさん,初めまして.お返事ありがとうございます.
ASSERTが出るのは,

File:afxwin2.inl
Line:126

File:winocc.cpp
Line:331
です.

ダイアログのEditBoxのテキストカラーを変更するときは
上記の方法で問題なく出来たのですが,何故でしょう?

僕も,「m_ed2をCEditView型」として定義している所が怪しいと
思ったのですが,具体的にどう怪しいのかが解りません.


返信引用
CdS
 CdS
(@CdS)
ゲスト
結合: 24年前
投稿: 176
 

SDIとかあまりよく分からないですが、WM_CTLCOLORではなく=WM_CTLCOLORをオーバーライドし

HBRUSH CEdit1View::CtlColor(CDC* pDC, UINT nCtlColor)
{
if(nCtlColor == CTLCOLOR_EDIT){
pDC->SetTextColor(m_Text);
pDC->SetBkMode(TRANSPARENT);
return (HBRUSH)(COLOR_WINDOW + 1);
}
return NULL;
}

とでもすればいいのでは。Invalidateは
GetEditCtrl().Invalidate(TRUE);
とでも。

>ソース名と行番号が書いてあるはずなので、それをもとに原因を探りましょう。
と書いたとおり、他人任せにせず、自分で調べるようにしてください。通常は
C:\Program Files\Microsoft Visual Studio\VC98\MFC\SRC
にソースがあります。


返信引用
ん
 ん
(@ん)
ゲスト
結合: 23年前
投稿: 81
 

デバッグの仕方で一つ。

1.ASSERTのダイアログが出た時点で[ブレーク]でプログラムを一時停止。
2.[コールスタック]で自分のプログラムのどの部分が関連しているのか調査。
3.自分のプログラムの関連部分がわかったら関連している変数の値をチェック。

で、大抵原因はわかります。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました