昨日に続き、またまた教えてください。私の Visual C++ の使用方法は非常にエレギュラー
な方法と感じていますが、これしか出来ないので仕方がありません。
それで質問は (View.cpp に実行したい、プログラムをコーデングしています)
SDIアプリケーションのダイアログベースの View.cpp に
void CView::OnDrawItem(int nIDCtl, LPDRAWITEMSTRUCT lpDrawItemStruct) と
void CView::OnButton1() ハンドラーを追加して、この OnButton1() から
OnDrawItem を呼び出して使用しています。つまい、
void CRadiobtaView::OnDrawItem(int nIDCtl, LPDRAWITEMSTRUCT lpDrawItemStruct)
{
// TODO: この位置にメッセージ ハンドラ用のコードを追加するかまたはデフォル
トの処理を呼び出してください
CFormView::OnDrawItem(nIDCtl, lpDrawItemStruct);
}
void CRadiobtaView::OnButton1()
{
// TODO: この位置にコントロール通知ハンドラ用のコードを追加してください
int nID = 0;
LPDRAWITEMSTRUCT lpDraw;
CRadiobtaView::OnDrawItem(nID, lpDraw);
}
こうして、ビルドすると、
warning C4700: 値が割り当てられていないローカルな変数 'lpDraw' に対して参照が行われまし
た。の警告が出ます。これを解決する方法を教えてください。
(構造体を理解できない悲しさです)
グローバルで宣言したらどうですか??
LPDRAWITEMSTRUCT lpDraw = 0; // って書く。
> 私の Visual C++ の使用方法は非常にエレギュラーな方法と感じていますが、
> これしか出来ないので仕方がありません。
危険です。遅かれ早かれ破綻しそう。
有効な値をセットしないと、実行時に問題が出ると思いますが、、、
何の為にOnDrawItemを呼び出してるのでしょうか?(?_?)
> 有効な値をセットしないと、実行時に問題が出ると思いますが、、、
...早速破綻したか? ^^;
> LPDRAWITEMSTRUCT lpDraw;
っていうのはDRAWITEMSTRUCT構造体のポインタです。
OnDrawItem()はこの構造体の内容を使って描画するので
有効な値がセットされたDRAWITEMSTRUCT構造体の実体がないと
落ちますよ。
直接 OnDrawItem を呼ばずに、
InvalidateRect や RedrawWindow を使ってコントロールを再描画すればいいのでは?
NEG(ねぐ)さん、FrozenAquariumさんに他の方々どうもありがとうございます。
構造体の初期化がほんの少しわかりました。とりあえずエラーなしで実行できました。
何の為にOnDrawItemを呼び出してるのでしょうとのご意見ももつともと思います。
それで、OnDrawItemを使用しない方法も考えることも出来ました。