2016-05-10 12 views
2

Ich lerne MFC und ich versuche, über das Senden von Nachrichten zu lernen. Ich habe Tage gesucht, aber ich konnte nicht herausfinden, was genau ich brauche.Minimieren und Wiederherstellen von Fenster mit Senden von Nachrichten in MFC

Ich habe zwei Dialogfelder und einer von ihnen hat eine Schaltfläche, die das andere Fenster minimieren oder wiederherstellen soll. Ich bin in der Lage, herauszufinden, wie man Zeiger benutzt, um dies zu erreichen, aber ich möchte es in eine SendMessage-Funktion konvertieren.

Hier ist der aktuelle Code i mit Zeigern verwenden ...

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; 
     } 
    } 
} 

Wenn jemand erklären könnte, wie ähnliche Funktion zu erhalten, indem sie Nachrichten anstelle von Zeigern verwenden, das wäre sehr geschätzt.

+0

Keine Notwendigkeit, Nachrichten zu senden, 'ShowWindow' ist in Ordnung. Wenn Sie jedoch darauf bestehen wollen, versuchen Sie ['SendMessage'] (https://msdn.microsoft.com/en-us/library/t64sseb3.aspx) mit [' WM_SYSCOMMAND'] (https://msdn.microsoft.com) /en-us/library/windows/desktop/ms646360(v=vs.85).aspx) –

+0

Ich habe versucht, es mit SendMessage und SW_SYSCOMMAND herauszufinden, aber ich kann nicht herausfinden, wie Sie das andere Fenster angeben . Ich kann es für das Fenster machen, das den Knopf enthält, aber das ist nicht was ich brauche. –

+0

'm_windowOne-> SendMessage (WM_SYSCOMMAND, SC_MINIMIZE);', aber wie ich zuvor geschrieben habe, ist es sinnlos. –

Antwort

0

Dies ist ein etwas anderen Zusammenhang, aber es vermittelt die priniples:

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); 
} 

Im obigen Szenario, wann immer Dialog CSomeDialog minimiert oder wiederhergestellt wird es dieses Fenster auch auf die Hauptanwendung Feeds.

Wenn Sie den betreffenden Dialog als Variable in Ihrer Klasse haben, dann sollte ShowWindow(...) ausreichen.

Verwandte Themen