關閉視窗和隱藏視窗

來源:互聯網
上載者:User

 BOOL Close() { return SendMessage(WM_CLOSE,0,0); }

LRESULT SendMessage(UINT nMessage,WPARAM wParam,LPARAM lParam) { return ::SendMessage(m_hWnd,nMessage,wParam,lParam); }

首先,關閉視窗的話,再下次再要建立剛才的視窗的話,就會

m_Atom=RegisterClass(&wc);
 if(m_Atom==0) return FALSE;

直接跳出,RegisterClass不成功。跟進去你會發現是1410-類別已存在。

這是因為視窗的建立是註冊再建立的。所以剛才調用了close後,系統會自動調用

case WM_DESTROY:
            CommandBar_Destroy(g_hWndMenuBar);
            PostQuitMessage(0);
            break;

摧毀視窗。但註冊資訊並沒有刪除,這就好比你在一個檔案夾下放2個同名的檔案一樣,是放不進去的。

這個問題的解決辦法就是調用:

UnregisterClass(GetClassName(),GetEmbApp()->GetInstance()); // 銷毀註冊的視窗資訊

這樣下次再建立就不會有問題了。。

 

如果你的視窗是自己封裝的類,視窗裡面又放了視窗,當你close大視窗的時候,下次再恢複,只有大視窗顯示了,小的視窗(我的是button)就不會顯示出來。所以,這樣又要怎麼辦呢?

進過一下午的摸索,終於找到了跟好的方法,那就是隱藏視窗。mobile中總是摧毀,建立,摧毀,建立,視窗這樣是不好的。耗資源。所以最好的方法就是讓程式到後台去工作。

具體做法就是:

case IDM_NO:
  ::ShowWindow(this->m_hWnd,0);    // 隱藏視窗

 

下次再要調用的話,就到你建立的地方加個判斷。

#if defined(WIN32_PLATFORM_PSPC) || defined(WIN32_PLATFORM_WFSP)
  HWND hWnd=FindWindow(GetClassName(),szTitle);
  // UnregisterClass(GetClassName(),GetEmbApp()->GetInstance()); // 銷毀註冊的視窗資訊
  if(hWnd)
  { // 將焦點置於最前面的子視窗
   // “| 0x00000001”用於將所有附屬視窗置於前台並
   // 啟用這些視窗。
   SetForegroundWindow((HWND)((ULONG) hWnd|0x00000001)); // 將建立指定視窗的線程設定到前台,並且啟用該視窗
   ShowWindow(SW_RESTORE); // 恢複隱藏的視窗
   return FALSE;
  }
 #endif

這樣就實現了視窗的自由調用。。哈哈大功告成。嘿嘿。。。。。。折磨了一天的問題解決了,好爽,希望這樣的問題不要再為難以後的朋友,,希望對大家有協助。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.