プロパティページの1ページ目に何も表示されない – プログラミング – Home

プロパティページの1ページ目に何も表示...
 
通知
すべてクリア

プロパティページの1ページ目に何も表示されない


K嬢
 K嬢
(@K嬢)
ゲスト
結合: 20年前
投稿: 3
Topic starter  

プロパティシートにプロパティページを4枚貼り付けてモードレスで動作させています。
プロパティが表示されると、1ページ目にあるはずのエディットボックスが
まったく表示されず、ツルッとしたプロパティページが表示されてしまいます。
2ページ目のタブをクリックして、表示を2ページ目のプロパティページに切り替えた後、
再度1ページ目のタブをクリックすると、今度はきちんと1ページ目に配置した
エディットボックスが表示されるようになります。
プロパティが表示された直後に1ページ目が正しく表示されるようにするには
どうしたら良いでしょうか。よろしくお願いします。


引用解決済
トピックタグ
あいる
 あいる
(@あいる)
ゲスト
結合: 20年前
投稿: 55
 

とりあえず、何の事かさっぱりな感じなので・・・

spy++ で、EditBox が表示されてない時に、そのEditBox がどのようなステータスになってい
るか調べる。
もし、VISIBLE が立ってたら、単純に描画されて無いだけだろうから、
OnShowWindow 辺りででもUpdateWindow すればとりあえずが出るかと・・・

CPropertyPage を使っているなら、そのEditBox をリソースで定義してるかと思われるので、
その VISIBLE 設定を確認する(稀にfalseになってることが・・・)

EditBox を動的に作成しているなら、それがどこで作成されているかによって動作がかわる
※ この場合、情報が足りなくて一切回答できないかも

こんなとこですかねぇ~?


返信引用
あいる
 あいる
(@あいる)
ゲスト
結合: 20年前
投稿: 55
 

補足:
ちなみに、前述した内容は回答ではないです(^^;

もし、描画されて無いだけなら、最小化して元に戻すと表示されたり?
それならそれで、コードがないとなんともいえないかもだけど・・・(^^;


返信引用
K嬢
 K嬢
(@K嬢)
ゲスト
結合: 20年前
投稿: 3
Topic starter  

お返事ありがとうございます。
何かちょっとしたことが足りないだけだろうと軽く考えていたので
説明不足&言葉が足りませんでした。
失礼いたしました。

実際にプロパティシートを表示している箇所です。

BOOL CMyPropertySheet::Create()
{
// リソースの切り替え
AFX_MANAGE_STATE(AfxGetStaticModuleState());

// プロパティページを追加
MyAddPage();

// 実体がない場合はCreateする
if (!m_hWnd || !::IsWindow(m_hWnd)) {
// ウィンドウ作成
if (!CPropertySheet::Create(GetMainWnd())) {
return FALSE;
}
}

// タイトルを設定
if( m_pFeature != NULL ){
this->SetWindowText(○○○ + のプロパティ);
}

// ウィンドウハンドルをセット
SetHWnd(m_hWnd);

return TRUE;
}

上記メソッド内で下記のようにAddPageしています。
CWndからCPropertyPageにキャストしてプロパティページオブジェクトを得ています。

void CMyPropertySheet::MyAddPage()
{
// リソースの設定
AFX_MANAGE_STATE(AfxGetStaticModuleState());

// 1ページ目のCWndへのポインタを取得
CWnd* pDialog1 = (CWnd*)CMD.GetDialogTool(プロパティページ1);
if( pDialog1 != NULL ){
// CWndからプロパティページオブジェクトを得る
CPropertyPage* pPage1 = dynamic_cast<CPropertyPage*>
(pDialog1);
if( pPage1 != NULL ){
// ページオブジェクトを構築
pPage1->Construct(IDD_PROP_PAGE1);
// プロパティシートにページを追加
AddPage(pPage1);
}
}

// 以下同様に2~4ページ目までをAddPage


// 「適用(A)」ボタンを消す
this->m_psh.dwFlags|=PSH_NOAPPLYNOW;
}

エディットボックスはすべてプロパティページのリソースに定義しています。
プロパティシートをCreateした直後に、プロパティページまたは個々のエディットボックスを
再描画してみよう、そんなコードはどう書けばいいのか?
という方向で考えていました。

よろしくお願いします。


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

やはり、あいるさんの言われているように描画がされていないだけの様に見えますね・・

CMyPropertySheetを貼り付けているWindowで再描画関数を呼んでいますか?
確認方法を1つ
このアプリを立ち上げて、1ページ目が何も表示されていない状態で、
メモ帳などの別アプリを重ねてみてください。(一部だけ重ねると尚良い)
その後、重ねたアプリ(メモ帳等)を閉じます。

このとき、重ねた部分が再描画されるハズなので
その部分だけが意図したデザインで表示されていれば
間違いなくUpdateWindow()等を呼ぶことで解決できるでしょう。

但し、UpdateWindow()を呼んでいるにも関わらず・・・って話であれば
初期化順(ネスト)やスレッド構成により
Windowのイベントループがうまく回っていない可能性があるので
別途、御相談ってことで、、、

PS.
ここ2,3日は暇なんで、私なんかの回答でよければ
なるべく多くの質問に答えて行きたいと思います!
(暇つぶしとも言います・・・)


返信引用
K嬢
 K嬢
(@K嬢)
ゲスト
結合: 20年前
投稿: 3
Topic starter  

確認方法を実行してみました。
プロパティの上に別のアプリのウィンドウを重ねてみましたが、、
再描画されませんでした。プロパティページには何も表示されないままでした。

プロパティシートをCreateした直後にUpDateWindow()を呼んでみましたがダメでした。
また、プロパティページ1ページ目クラスのOnInitDialog()で個々のエディットボックス
についてUpDateWindow()してみましたがこれもうまくいきませんでした。

UpDateWindow()をどこで(どのタイミングで)行えば良いのでしょうか?


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

う~ん、そうなると、アプリケーションが立ち上がった時点で
プロパティーシートの中身がまだCreateされていない(もしくは非表示設定)ってことです
ね。

CMyPropertySheet::Create()が何時呼ばれているか確認してください。
そのタイミング次第ですが、MyAddPage()の処理がスキップされていませんか?


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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