VC++初心者です。
現在、Visual Sttudio2005 MFCでダイアログベースのツールを作成しています。
モードレスダイアログを用いて2つの子ダイアログをタブ切り替えにてデータ表示をしています。1つの子ダイアログにはリストコントロールでデータを表示しようとしていますが、実行するとInsertColumn()でエラーとなってしまいます。対処方法をどなたか御存知でないしょうか。
ちなみに、子ダイアログに貼り付けたボタンも効きません。
以下親ダイアログのソースコードとなります。
// 子ダイアログ(Job Header/Page Header)作成
cPrintJobHeaderP.m_PrintJobHeader.Create(CPrintJobHeader::IDD, this));
cPrintPageHeaderP.m_PrintPageHeader.Create(CPrintPageHeader::IDD, this));
// 子ダイアログ移動
cPrintJobHeaderP.m_PrintJobHeader.GetClientRect(&rect);
rect.OffsetRect(10, 31);
cPrintJobHeaderP.m_PrintJobHeader.MoveWindow(&rect, FALSE);
cPrintPageHeaderP.m_PrintPageHeader.MoveWindow(&rect, FALSE);
//リストコントロール表示
PageHeaderListInit();
PageHeaderListInsertItem();
// タブ作成
m_PrintJobTabCtrl.InsertItem(0, _T("Print Job(Job Header)"));
m_PrintJobTabCtrl.InsertItem(1, _T("Print Job(Page Header)"));
// 初期表示
OnTcnSelchangeTab(0, 0);
//子ダイアログのソース
for (i = 0; i < clmNum; i++)
{
lvc.iSubItem = i; // サブアイテム番号
lvc.pszText = caption[i]; // 見出しテキスト lvc.cx = 100; // 横幅 if (cPrintPageHeaderP.m_xcPageHeaderList.InsertColumn(i, &lvc) == -1) {err = 1; break;}
}
lvcはLVCOLUMNですよね。初期化してないメンバはどうなって
るのでしょう。特にマスク(=mask)を忘れないようにしないと
受け付けてもらえません。
(例)
lvc.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT
lvc.fmt = 0;
lvc.cx = 100;
lvc.iSubItem = 0;
lvc.iImage = 0;
lvc.iOrder = 0;
lvc.pszText = caption[i];
lvc.cchTextMax= ::lstrlen( caption[i]);
仲澤@失業者さん
御回答有難う御座います。
lvc.mask = LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;
と設定しています。
色々状況を調べたら、子ダイアログの生成に問題がありそうです。
子ダイアログに貼り付けボタンの押してもOnBnClickedButton()実行されません。
また、子ダイアログにOnInitDialog()を追加しても実行されない状況です。
ちなみに、親ダイアログは以下の方法で生成しています。
cPrintJobResultP = new CPrintJobResult(this);
cPrintJobResultP->Create(IDD_PRINT_JOB_RESULT);
子ダイアログは以下の方法で生成しています。
// 子ダイアログ(Job Header/Page Header)作成
cPrintJobHeaderP.m_PrintJobHeader.Create(CPrintJobHeader::IDD, this));
cPrintPageHeaderP.m_PrintPageHeader.Create(CPrintPageHeader::IDD, this));
>また、子ダイアログにOnInitDialog()を追加しても実行されない状況です。
InitCommonControlsEx()等で初期化していますか?
以前、InitCommonControls()もやらずにダイアログ生成しようとして、WM_INITDIALOGすら飛んでこない…というのを経験しています。
子ダイアログの生成に問題がありました。
子ダイアログクラスcPrintJobHeaderPを親ダイアログで変数定義
(m_dlgPrintJobHeader)して
::OnInitDialog()
{
m_dlgPrintJobHeader.Create(CPrintJobHeader::IDD, this);
・
・
・
・
}
する事で、子ダイアログのOnInitDialog()、OnBnClickedButton()
が実行されました。