プロパティシート – プログラミング – Home

通知
すべてクリア

[解決済] プロパティシート

固定ページ 1 / 2

まかろに
 まかろに
(@まかろに)
ゲスト
結合: 20年前
投稿: 36
Topic starter  

プロパティシートの[OK]ボタンとかを全て消したいのですが
どうすればよろしいでしょうか?
アドバイスをお願いします。


引用未解決
トピックタグ
REE
 REE
(@REE)
ゲスト
結合: 23年前
投稿: 240
 

ボタンが不要であれば、プロパティシートを使う必要がないのでは?
自前で一からダイアログを作るというのが、一番近道だと思います。


返信引用
まかろに
 まかろに
(@まかろに)
ゲスト
結合: 20年前
投稿: 36
Topic starter  

レスありがとうございます。

子のウィンドウに自分で作ったダイアログを使うというのが
よくわからなくて、タブをつけてスライダーとかいろいろ配置したかったので
プロパティシートを使えばまだ簡単かなと思いまして・・・
もっといい方法があるなら教えていただけるとうれしいです。

すいません。初心者なのでわけわからないことを言ってるかもしれませんが
よろしくお願いします。


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

OKボタンのリソースIDは「IDOK」です。
CancelボタンのリソースIDは「IDCANCEL」です。
ApplyボタンのリソースIDは「IDAPPLY」です。

リソースIDが解れば、あとはCWnd::ShowWindow()。


返信引用
まかろに
 まかろに
(@まかろに)
ゲスト
結合: 20年前
投稿: 36
Topic starter  

なるほど、ありがとうございます。
さっそく試してみたのですが、エラーが…
下記のコードなのですが、どこが間違っているのか
教えていただけますでしょうか?
本当に素人ですいません…

Cmypsheet mysheet(プロパティシートテスト);
CWnd *pWnd;

pWnd = mysheet.GetDlgItem(IDOK);
pWnd->ShowWindow(FALSE);


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

どういうエラーが出ているのかは解りませんか?


返信引用
まかろに
 まかろに
(@まかろに)
ゲスト
結合: 20年前
投稿: 36
Topic starter  

エラーというか、アサートに引っかかってるのでしょうか。

Debug Assertion Failed!

Program:C:\~.exe
File:winocc.cpp
Line:76

For infomation on how your Program can cause an assertion
failure,see the Visual C++ documentation on asserts

(Press Retry to debug the application)

出てくるウィンドウをそのまま書いてみました。
ここで、中止、再試行、無視と選べるのですが
再試行を選択すると、強制終了になります。

根本的に何か間違っているのでしょうか?
よきアドバイスをお願いします。


返信引用
monkey
 monkey
(@monkey)
ゲスト
結合: 21年前
投稿: 70
 

01 > Cmypsheet mysheet(プロパティシートテスト);
02 > CWnd *pWnd;
03 > pWnd = mysheet.GetDlgItem(IDOK);
04 > pWnd->ShowWindow(FALSE);

Cmysheetクラスのオブジェクトは生成されていますが(01)、プロパティシートのウィン
ドウは作成されていません。
したがって、IDOKで識別されるコントロール(ウィンドウ)が存在しておらず、
GetDltItem関数は有効なポインタを返さない(03)ので、ShowWindow関数呼び出し(04)の
ところでアサートしたものと思われます。
CPropertySheet::Create関数(モードレス)、または、CPropertySheet::DoModal関数
(モーダル)によって、プロパティシートのウィンドウを作成、表示してください。
これらの使用法は、MSDN MFCライブラリリファレンスを参照してください。


返信引用
PATIO
(@patio)
Famed Member
結合: 3年前
投稿: 2660
 

プロパティシートは便利ですけれど、自動化されているので細かい事を言い出すと
ただ使うだけではすまないようになります。色々とカスタマイズするには、
それなりの知識がいりますからその辺の勉強もしないと使いこなせないでしょう。
ボタンを隠すにしてもそれなりに知識が必要です。

どういう状況でプログラミングをされているのかわかりませんけれど、
勉強の為にされているのであれば、自分でダイアログを作成する事から
勉強した方がいいと思いますよ。Tabコントロールの使い方も覚えておけば、
なお良いと思います。
コントロールもダイアログも結局は全てウインドウである事を理解できれば、
どう使えばうまく行くかもわかってくると思います。
ウインドウの制御をきちんとできるのが前提ではありますけれども。
そういう意味ではウインドウの振る舞いとか制御するにはどうするかを
勉強すると良いかもしれませんね。応用がきく知識ですから。


返信引用
Rrr
 Rrr
(@Rrr)
ゲスト
結合: 21年前
投稿: 5
 

>プロパティシートの[OK]ボタンとかを全て消したいのですが

ダイアログ上にモードレスプロパティシートを置くような形態にするだけで
標準のボタンは全部消えるはずだけど。


返信引用
まかろに
 まかろに
(@まかろに)
ゲスト
結合: 20年前
投稿: 36
Topic starter  

たびたびお世話になります。

PATIOさん >
全くおっしゃる通りで、まだまだ勉強が足りません。
さらに精進を続けていこうと思います。
やはり基本はウィンドウですよね。

monkeyさん、Rrrさん >
ご指摘ありがとうございます。
さっそくMSDNのリファレンスを見てみました。

今まではDoModalで表示していたのですが
この関数は何かボタンが押されない限り
それ以降に進まないのですかね?
ちなみにソースは

Cmypsheet mysheet(プロパティシートテスト);
int ret;

ret = mysheet.DoModal();

となっているのですが、この関数でウィンドウの作成&表示で
抜けたらウィンドウ破棄ですよね?(こ、この時点で間違ってるのでしょうか?)
てことは、ShowWindow でボタンを消すというコードを
どこにはさめばいいのでしょうか…

さらに、モードレスも試してみたのですが

mysheet.Create();

こちらは、シートが一瞬だけ表示されてすぐに消えてしまいます。
戻り値を見てみると、[OK] が押されたような感じになっています。

という状況でして、さらにこんがらがっております。
本当に恐縮なのですが、救いの手をよろしくお願いします。
長文・駄文、失礼致しました。


返信引用
Rrr
 Rrr
(@Rrr)
ゲスト
結合: 21年前
投稿: 5
 

私が言った方法は...
新たにダイアログを作って DoModal() で起動し、
そのダイアログの内部に子ウィンドウ(WS_CHILD)としてプロパティシートを
作成するものです。

手順としては、

・新しいダイアログをダイアログエディタで作成し、CDialog派生クラスを作る
・そのダイアログのメンバー変数にプロパティシートを加える
(例: CMyPropertySheet m_sheet)
・そのダイアログを DoModal() で起動
・OnInitDialog() の中で m_sheet.Create(this, WS_CHILD | WS_VISIBLE) を実行

な感じ。
これで標準ボタンがひとつも無いプロパティシートの出来上がり。


返信引用
Rrr
 Rrr
(@Rrr)
ゲスト
結合: 21年前
投稿: 5
 

補足。

VC++6.0 なら
[プロジェクト]-[プロジェクトへ追加]-[コンポーネントおよびコントロール]で
「Visual C++ Compornents」の中から「プロパティシート」を選択すれば
モードレスプロパティシートを簡単に作ることができます。
ただし、それだと CMiniFrameWnd の内部にプロパティシートを作るものになりますが、
参考にはなると思います。

#ところで上記のようなコントロールギャラリは VC++.net に見当たらないんですが、
#無くなったんですかね?
#どなたかご存知でしょうか?


返信引用
まかろに
 まかろに
(@まかろに)
ゲスト
結合: 20年前
投稿: 36
Topic starter  

Rrrさん >
なるほど、ちょっと勘違いしていました。
早速試してみようと思います。

モードレスの方はよいとして
Modal()で表示した場合のボタンの消し方(どこにコードをはさむか?)も
やっぱり引っかかりますので教えていただけませんでしょうか。

いつまでも引っ張って、申し訳ありません。
どうぞよろしくお願いします。


返信引用
monkey
 monkey
(@monkey)
ゲスト
結合: 21年前
投稿: 70
 

> Modal()で表示した場合のボタンの消し方(どこにコードをはさむか?)

CmypsheetクラスのOnInitDialog関数内ではどうでしょう。


返信引用
固定ページ 1 / 2

返信する

投稿者名

投稿者メールアドレス

タイトル *

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