<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                前面我們在編寫Win32應用程序的思路都是: 1、設計窗口類。2、注冊窗口類。3、創建窗口。…… 然而,當我們接觸控件以后, 會發現一個問題,我們在窗口上放置控件實在不好弄,而資源中的對話框具有圖形編輯器,操作起來相對方便。 于是,就有了一個想法:把對話框用作主窗口,那我們在布局控件時就輕松了。 其實這想法在網上已有牛人做了,不過,人家是用Win32匯編干的,當然,要把它變為C++就更簡單了。 首先,介紹第一個法子,直接以桌面作為父窗口來創建對話框。 1、創建一個對話框資源,界面就發揮你的設計天賦了。 2、創建一個圖標資源,既作為應用程序的圖標(VS編譯時會選擇第一個添加到資源中的圖標作為EXE的圖標),也作為對話框的圖標。 3、在代碼中創建并顯示對話框。 ~~~ #include <Windows.h> #include "resource.h" // 開啟可視化效果 #pragma comment(linker,"\"/manifestdependency:type='win32' \ name='Microsoft.Windows.Common-Controls' version='6.0.0.0' \ processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"") INT_PTR CALLBACK DlgProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam); HINSTANCE hgInst; int WINAPI WinMain(HINSTANCE hThisApp, HINSTANCE hPrevApp, LPSTR lpCmd, int nShow) { hgInst = hThisApp; HWND hdlg = CreateDialog(hThisApp, MAKEINTRESOURCE(IDD_MY),GetDesktopWindow(),(DLGPROC)DlgProc); if(!hdlg) { return 0; } ShowWindow(hdlg,SW_SHOW); MSG msg; while(GetMessage(&msg,NULL,0,0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return 0; } INT_PTR CALLBACK DlgProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam) { switch(msg) { case WM_INITDIALOG: // 設置對話框的圖標 SendMessage(hDlg, WM_SETICON, ICON_SMALL, (LPARAM)LoadIcon(hgInst, MAKEINTRESOURCE(IDI_APP))); return 0; case WM_SYSCOMMAND: if(wParam == SC_CLOSE) { PostQuitMessage(0);//退出 } return 0; } return (INT_PTR)FALSE; } ~~~ 這樣,我們可以運行一下。 ![](https://box.kancloud.cn/2016-06-14_575fd2d29ff91.PNG) ================================================================= 第二種方法,我們還是遵照設計窗口類、注冊窗口類、創建窗口等步驟,只是把對話框作為窗口的子級,對話框采用Form View視圖。 在插入資源的對話框中,點擊Dialog左邊的圖標,展開列表,在列表中選擇IDD_FORMVIEW,然后點“新建”。 ![](https://box.kancloud.cn/2016-06-14_575fd2d2b1713.PNG) 然后你看到一個沒有邊框和標題欄的對話框。 ![](https://box.kancloud.cn/2016-06-14_575fd2d2cdeeb.PNG) 接下來我們可以放些控件上去。 ![](https://box.kancloud.cn/2016-06-14_575fd2d2e0634.PNG) 最后,在響應WM_CREATE消息時,創建并顯示對話框,父級是我們的主窗口。 ~~~ case WM_CREATE: { // 創建對話框 HWND hdlg = CreateDialog(hgAppInst, MAKEINTRESOURCE(IDD_MYFORM), hwnd, (DLGPROC)DlgProc); // 顯示對話框 ShowWindow(hdlg, SW_SHOWNA); } return 0; ~~~ 最后運行結果如下: ![](https://box.kancloud.cn/2016-06-14_575fd2d2f3590.PNG) 完整的代碼清單: ~~~ #include <Windows.h> #include "resource.h" #pragma comment(linker,"\"/manifestdependency:type='win32' \ name='Microsoft.Windows.Common-Controls' version='6.0.0.0' \ processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"") LRESULT CALLBACK WindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam); INT_PTR CALLBACK DlgProc(HWND hdlg, UINT msg, WPARAM wParam, LPARAM lParam); HINSTANCE hgAppInst; int WINAPI WinMain(HINSTANCE hThisApp, HINSTANCE hPrevApp, LPSTR lpCmd, int nShow) { // 設計窗口類 WNDCLASS wc = { }; wc.hbrBackground = (HBRUSH)COLOR_WINDOW; wc.lpfnWndProc = (WNDPROC)WindowProc; wc.lpszClassName = L"supper_man"; wc.hInstance = hThisApp; wc.style = CS_HREDRAW | CS_VREDRAW; RegisterClass(&wc); hgAppInst = hThisApp; // 創建窗口 HWND hwnd = CreateWindow(L"supper_man", L"超級應用", WS_OVERLAPPEDWINDOW, 40, 25, 380, 300, NULL, NULL, hThisApp, NULL); if(!hwnd) return 0; ShowWindow(hwnd, nShow); UpdateWindow(hwnd); // 消息循環 MSG msg; while(GetMessage(&msg,NULL,0,0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return 0; } LRESULT CALLBACK WindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { switch (msg) { case WM_CREATE: { // 創建對話框 HWND hdlg = CreateDialog(hgAppInst, MAKEINTRESOURCE(IDD_MYFORM), hwnd, (DLGPROC)DlgProc); // 顯示對話框 ShowWindow(hdlg, SW_SHOWNA); } return 0; case WM_DESTROY: PostQuitMessage(0); return 0; default: return DefWindowProc(hwnd,msg,wParam,lParam); } return 0; } // 處理對話框消息 INT_PTR CALLBACK DlgProc(HWND hdlg, UINT msg, WPARAM wParam, LPARAM lParam) { /* .............. */ return (INT_PTR)FALSE; } ~~~
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看