(MFC)タブの中にダイアログを表示出来ません。Assertが出ます。 – プログラミング – Home

(MFC)タブの中にダイアログを表示出...
 
通知
すべてクリア

(MFC)タブの中にダイアログを表示出来ません。Assertが出ます。


てけてけ
 てけてけ
(@てけてけ)
ゲスト
結合: 10年前
投稿: 3
Topic starter  

初投稿です。よろしくお願いします。
現在VC++2013 MFC(ダイアログベース)を使用
しています。
下記URLを参考にタブ表示を行おうとしています。

http://blog.livedoor.jp/infoport/arch
ives/50278713.html

しかし、
//タブコントロールの初期化処理
CRect r;
m_pg1.Create(CPage1::IDD,this);
m_pg2.Create(CPage2::IDD,this);
※※※※※※※※※※※※※※※※※※※※※※※※※
m_pg1.GetClientRect(&r);
※※※※※※※※※※※※※※※※※※※※※※※※※
r.OffsetRect(40,40); // ここの数字は適宜
直す
m_pg1.MoveWindow(&r,false);
m_pg2.MoveWindow(&r,false);

m_tab.InsertItem(0,ページ1);
m_tab.InsertItem(1,ページ2);
// 最初のページを表示
m_nCurPage = 0;
OnTcnSelchangeTab1(0,0);

上記※の中の箇所でAssertが出てしまいます。
Assertは以下の箇所です。
_AFXWIN_INLINE void
CWnd::GetClientRect(LPRECT lpRect)
const
{ ASSERT(::IsWindow(m_hWnd));
::GetClientRect(m_hWnd, lpRect); }
m_hWndがNULLでしたので、Create出来ていない
のかと思いますが、自力で解決出来ませんでした。

他に必要な情報がございましたら補足いたしますの
で、ご助言お願いします。


引用解決済
トピックタグ
てけてけ
 てけてけ
(@てけてけ)
ゲスト
結合: 10年前
投稿: 3
Topic starter  

追加です。
Assertion Failedのメッセージが出る具体的な場所を記載します。

BOOL AFXAPI AfxAssertFailedLine(LPCSTR lpszFileName, int nLine)
{
// we remove WM_QUIT because if it is in the queue then the message
box
// won't display
MSG msg;
BOOL bQuit = PeekMessage(&msg, NULL, WM_QUIT, WM_QUIT, PM_REMOVE);
※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※

BOOL bResult = _CrtDbgReport(_CRT_ASSERT, lpszFileName, nLine, NULL,
NULL);
※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※

if (bQuit)
PostQuitMessage((int)msg.wParam);
return bResult;
}

上記※内です。
よろしくお願いします。


返信引用
ITO
 ITO
(@ITO)
ゲスト
結合: 22年前
投稿: 1235
 

おそらく原因は、
>m_pg1.GetClientRect(&r);
 これが実行されるとき、まだタブコントロールが作成されていない、
もしくはタブコントロールがほかのウインドウの下に隠れているですね。

これを解決するためには、「m_pg1.GetClientRect(&r);」をタブコントロールの
「OnCreate」内で実行するのがいいと思いますね。


返信引用
てけてけ
 てけてけ
(@てけてけ)
ゲスト
結合: 10年前
投稿: 3
Topic starter  

>ITO様
返答ありがとうございます。

>これを解決するためには、「m_pg1.GetClientRect(&r);」をタブコントロールの
>OnCreate」内で実行するのがいいと思いますね。

と申されましたが、私のタブコントロール内にOncreateがありません。
ダイアログベースで作成している場合、Oncreateを自分で新たに作るしかないでしょう
か?


返信引用
ITO
 ITO
(@ITO)
ゲスト
結合: 22年前
投稿: 1235
 

>私のタブコントロール内にOncreateがありません。
失礼しました。
タブコントロールではないですね。
タブコントロールのために作った二つのダイアログ
 >m_pg1.Create(CPage1::IDD,this);
>m_pg2.Create(CPage2::IDD,this);
です。
今回は、
>m_pg1.GetClientRect(&r);
となると、m_pg1のほうですね。
これの、「Oncreate」、もしくは、OnInitDialogかですね。


返信引用
ITO
 ITO
(@ITO)
ゲスト
結合: 22年前
投稿: 1235
 

追伸、
>m_pg1.MoveWindow(&r,false);
>m_pg2.MoveWindow(&r,false);
これも個々のダイアログで実行したほうがいいですね。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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