アプリケーションを終了するには?

[戻る]
masa [E-Mail] 2000/11/04(土) 09:58:58
皆さんはじめまして開発環境はDevStudio97のVC5.0です

メインウィンドウ上にボタン「終了」を作って「ID_APP_EXT」
を割り当てただけだと何も起こらないのですが、どうしてでしょうか

メニューの「ファイル」→「アプリケーションの終了」には「ID_APP_EXT」があって
終了できるのに?
同じリソースID割り当てただけではだめなんですか

ku 2000/11/06(月) 16:11:29
AfxGetMainWnd()->PostMessage(WM_COMMAND, ID_APP_EXIT);
とでもしてみてください.

masa 2000/11/07(火) 00:53:18
ID_APP_EXT 以外の IDC_BUTTON1などのリソース割り当てをしコントロールに
対する関数を作成し「AfxGetMainWnd()->PostMessage(WM_CLOSE);」と言うのはやってます

聞きたいのは「ID_APP_EXT」をボタンコントロールのidにしたときメニューと同じ
動きをなぜしないのかを聞きたい

ku 2000/11/07(火) 08:54:46
逆に,なぜメニューと同じ動作をするのかご存じでしょうか?

SDIについて書いておきます(MDIでは下記の記述は参考程度にしかならないかもしれません).
おそらくCViewの派生クラスをオーナーにしてボタンを作成していると思いますが
メニューはCMainFrame作成の::CreateWindowExで作成しています.
ですからボタンもCMainFrameをオーナーとして作成しないと
メニューに連動しないのではないかと思います.

CButton btn;
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
    ...
    RECT rc = {100, 100, 200, 200};
    btn.Create("test", WS_CHILD | WS_VISIBLE, rc, this, ID_APP_EXIT);
}
UINT C???View::OnNcHitTest(CPoint point) 
{
    return HTCAPTION;
}

CMainFrame::OnCreateでCMainFrameをオーナーにしたところ
ボタンは表示されましたがボタンを押すことができません
Viewが上に乗っているのでボタンを押すことができないのでしょう.
ということでじゃまなViewを移動するためだけにOnNcHitTestを実装しました.

このコードをお試しになるのなら
実行後にViewをつかんで移動させてください.
Viewの移動後にCMainFrameをオーナーにしたボタンを押すことができます.

ku 2000/11/07(火) 08:58:21
> メニューはCMainFrame作成の::CreateWindowExで作成しています.
正確にはCFrameWnd::CreateExの::CreateWindowExで作成しています.
ですね.

masa 2000/11/09(木) 00:25:47
[[解決]]
関数のオーナーによる違いのためリソースアクセスできないと言うように解釈いたしましたCreateWindowExについては勉強不足のため理解できませんでした

ku 2000/11/09(木) 09:30:50
VC6だと新規作成のプロジェクトでWin32 Applicationを選ぶと
標準的な"Hello World!"アプリケーションが選べます.
VC5でも似たようなものがあると思います.

これだとCreateWindowの中のメニューを指定するところにNULLを指定してますが
この場合はRegisterClassのメニューを採用するって意味だったと思います.
CreateWindowExとCreateWindowは似たようなもんです.

MFCを使ってないシンプルな構成なのでCreateWindowも理解できるのではないかと思います.

古いスレッドには追加発言できません。