最小化について – プログラミング – Home

通知
すべてクリア

[解決済] 最小化について


ひろ
 ひろ
(@ひろ)
ゲスト
結合: 24年前
投稿: 149
Topic starter  

VC6.0 MFCで開発をしています.

初心者です.
コマンドを選択すると自身のダイアログが最小化するようにしたいのですが,上手くいきませ
ん.
初歩的ですが,自分のウインドウハンドルの取得の仕方もいまいち分かりません...

CWnd *pWnd = GetActiveWindow();
pWnd->m_hWnd;
CloseWindow();

としてコンパイルはとおるのですが,
コマンドを選択するとエラーがでます..
(デバックを行うとCloseWindowでひっかかり,m_hWndで式を評価できませんとエラー)

ご教授よろしくお願いします.
できればサンプルソースもお願い致します.


引用未解決
トピックタグ
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 22年前
投稿: 1301
 

> pWnd->m_hWnd;

何ですかこれわ?


返信引用
ひろ
 ひろ
(@ひろ)
ゲスト
結合: 24年前
投稿: 149
Topic starter  

正直よくわからないです..
サイトから探してサンプルソースをはりました...

自身のウインドウハンドルの取得の仕方を教えていただけないでしょうか?
お願いします.


返信引用
ひろ
 ひろ
(@ひろ)
ゲスト
結合: 24年前
投稿: 149
Topic starter  

CWnd *pWnd = GetForegroundWindow();
::CloseWindow(pWnd->m_hWnd);

としたらできました.
でもこれはForegroundWindowを最小化してしまいます...
非アクティブでも自分のダイアログを最小化するために,
自分のウインドウハンドルを取得したいのですが,いまいちわかりません.
お願いします.


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

そのコードが書けるのに自分自身のハンドルが取れない?
うーん。多分 MFC の前に C++ の勉強が必要な気のせいがする。

自分自身のクラス内 (自クラスメンバ内) からなら単に m_hWnd
「自分自身のクラス内」って表現が理解できる?
this->m_hWnd の省略形であることが理解できる?
できないのであれば MFC はあとまわしにするほうが近道。

自分自身のクラス外からなら、まずは自分自身を特定する方法をみつけるのが先。


返信引用
ひろ
 ひろ
(@ひろ)
ゲスト
結合: 24年前
投稿: 149
Topic starter  

そうだったんですか..
ありがとうございます!!
でも..
::CloseWindow(m_hWnd);

で試してみて,無反応だったのですが...


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

だから、そのコードをどこに書いたの?
自分自身って何のことかわかってる?
それを把握してない/できないのなら、先に C++ 自体の勉強が必須。

MFC/DlgBase なら例えば
void CTestDlg::OnMinimize() { ShowWindow(SW_MINIMIZE); }
で最小化ちゃんとされるよ。

強く非推奨だけど { ::CloseWindow(m_hWnd); } でもいくはず。


返信引用
ひろ
 ひろ
(@ひろ)
ゲスト
結合: 24年前
投稿: 149
Topic starter  

CTestDlgを最小化したい場合,
CTestDlg::Mini() { ::CloseWindow(m_hWnd);}
とCTestDlg内で関数をつくり,利用したいところ(同じクラス内)でこの関数を用いるように
したのですが,無反応でした.
ShowWindow(SW_MINIMIZE);
もためしてみたのですが無反応でした....

原因がよくわからないです..


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

> だから、そのコードをどこに書いたの?
> 自分自身って何のことかわかってる?
分っていないみたい。
> ShowWindow(SW_MINIMIZE);
> もためしてみたのですが無反応でした....
CTestDlg内の「On」がつく関数内で実行するはずだけど、
何処でじっこうしているのかな?


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

えーと、とりあえず MFC でどのくらいプログラム経験がありますか?
void CTestDlg::OnMinimize() { ShowWindow(SW_MINIMIZE); }
って書かれたときに
「ああ、新しい[最小化]ボタンを作ってClassWizardするんだな」
と思いますか?思えましたか?やってますか?(してなさそう)

>利用したいところ(同じクラス内)でこの関数を用いるように
だからそれはどこ?まさかコンストラクタ内とか?
コンストラクタ内ではまだ m_hWnd が作られていませんからダメ
CWnd のメンバ関数を使うとそういう状況を検出してくれるけど
API 直接 ::ShowWindow を使うと検出されないのでバグがみつからないよ

・新しい[最小化]ボタンを追加しそのハンドラ内で ShowWindow(SW_MINIMIZE);
・OnInitDialog 内 CDialog::OnInitDialog 呼び出し後に同上
をすると最小化します(後者は最小化状態で起動)

最小化されないのは、最小化呼び出しのタイミングが
・早すぎるか(その後で通常表示に戻っている)
・呼ばれていないか
どっちかしかありえない。


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

とりあえず、C++言語に関してはちゃんと知識はあると言う前提で良いのですか?
もしないなら、C++言語の勉強からした方が良いと思いますよ。
今使っているウインドウ制御に使っているMFCとライブラリはC++言語のライブラリなので
言語の知識がないと使いこなせません。
また、サンプルを見てウインドウの制御が仮に出来たとしても
恐らく応用が全く利かないと思います。

で、C++言語の知識はありますという話なら
MFCを使ってウインドウを表示したり、色々な制御を書けたりする基本的な方法を
MFCの入門書を使って勉強する事をお勧めします。
あと、何しているか分からないソースをコピーアンドペーストして動いても
実際には単に作業をしているだけで意味がありません。
ステップの一つ一つが何をしているのかを理解できて初めて意味があります。
なので、理解がきちんと進まないうちに先へ先へと進んでしまうのはお勧めできません。
退屈に感じる場合もあるでしょうが、一つ一つ確実に理解していく必要があります。


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

もとい、

誤)
今使っているウインドウ制御に使っているMFCとライブラリはC++言語のライブラリなので

正)
今使っているウインドウ制御に使っているMFCと言うライブラリはC++言語のライブラリなので


返信引用
ひろ
 ひろ
(@ひろ)
ゲスト
結合: 24年前
投稿: 149
Topic starter  

ご指摘ありがとうございます.
MFCの経験ははまだ2ヶ月程度です.
C++の知識もあまりないので,そこから学習していこうと思います.

最小化の件ですが,なんとか解決することができました.
ありがとうございました.


返信引用
ひろ
 ひろ
(@ひろ)
ゲスト
結合: 24年前
投稿: 149
Topic starter  

解決のチェック入れ忘れてました.
がんばって勉強します!


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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