2016-05-10 19 views
2

MFCを学習しています。メッセージの送信方法について学習しようとしています。私は日々を探していますが、私は何が必要なのか正確に把握できていません。MFCでのメッセージの送信を使用してウィンドウを最小化および復元

私には2つのダイアログボックスがあり、そのうちの1つには他のウィンドウを最小化または復元するためのボタンがあります。私はこれを達成するためにポインタを使用する方法を理解することができましたが、私はそれをSendMessage関数に変換したいと思います。ここで

が...私はポインタを使用し、現在のコードです

Window2.cpp

void CWindow2::OnBnClickedButton1() 
{ 
    // TODO: Add your control notification handler code here 
    if (m_windowOne != NULL) { 
     if (buttonstate == 0) { 
      m_windowOne->ShowWindow(SW_MINIMIZE); 
      buttonstate = 1; 
     } 
     else { 
      m_windowOne->ShowWindow(SW_RESTORE); 
      buttonstate = 0; 
     } 
    } 
} 

誰かは次のようになり、メッセージの代わりにポインタを使用することにより、同様の機能を取得する方法を説明できる場合大いに感謝します。

+0

メッセージを送信する必要はなく、 'ShowWindow'は問題ありません。しかし、あなたが主張したいのであれば、['SendMessage'](https://msdn.microsoft.com/en-us/library/t64sseb3.aspx)を[' WM_SYSCOMMAND'](https://msdn.microsoft.com /en-us/library/windows/desktop/ms646360(v=vs.85).aspx) –

+0

私はSendMessageとSW_SYSCOMMANDでそれを理解しようとしていますが、私は他のウィンドウを指定する方法を理解できないようです。私はそれがボタンが含まれているウィンドウのために機能することができますが、それは私が必要なものではありません。 –

+0

'm_windowOne-> SendMessage(WM_SYSCOMMAND、SC_MINIMIZE);'、しかし前に書いたように、それは無意味です。 –

答えて

0

これはわずかに異なるコンテキストであるが、それはpriniplesを伝える:CSomeDialogが最小またはそれがあまりにもアプリケーションのメインウィンドウにこれを供給する復元されるダイアログたびに上記のシナリオでは、

void CSomeDialog::OnSysCommand(UINT nID, LPARAM lParam) 
{ 
    if ((nID & 0x0000FFF0) == SC_MINIMIZE) 
    { 
     // Minimizing, post to main dialogue also. 
     AfxGetMainWnd()->ShowWindow(SW_MINIMIZE); 
    } 
    else if ((nID & 0x0000FFF0) == SC_RESTORE && IsIconic()) 
    { 
     // Restoring, post to main dialogue also. 
     AfxGetMainWnd()->ShowWindow(SW_RESTORE); 
    } 

    CDialogEx::OnSysCommand(nID, lParam); 
} 

問題のダイアログをクラス内の変数として使用している場合は、ShowWindow(...)で十分です。