創建一個簡單的窗口(eclipse c++)


玩了幾天的C++,突然發現一個問題,為啥我借的這本書C++教程800多頁,但是到結束都沒有介紹一點窗口的代碼呢?哪怕可以創建一個提示窗口呢?

 

我比較愚笨,想在網上找個在WINDOWS的窗口的程序,但是把代碼復制進去,都不能用。一看都是VC的,可是當時配置的環境就用的是eclipse+CDT+MinGW。一看到函數入口都是int WINAPI WinMain 而不是main的時候,就慌了。什么情況。

 

為此翻了一下午網站,都說的不詳不細的(時間都足夠裝幾遍VC的了),按道理說像我這樣環境的人應該很多,但是就是找不到,特別是版本不同,也沒有截圖,說的都沒有。唯一了解的就是編譯的時候要加個-mwindows。可是用的是Windows環境下的eclipse,編譯也就點下圖標。這句話到哪里去整啊。

但是終於還是找到了,在這里寫一下,以免以后忘記了。

選中工程,按ALT+Enter。會出現如下界面,在C/C++ Buid->Settings中的Tool Setting中左邊選中MinGW C++linker 右邊的command的g++后面加上-mwindows。結果順利運行了哈。我不知道這個是不是最好的方法,但是是我目前可用的方法。

 

對了,順便把代碼貼在這里,來源不記得哪個了,是借用的:

#include <windows.h>
#include <stdio.h>
//自定義消息循環相應函數
LRESULT CALLBACK myWndProc(HWND hWnd,
                                  UINT Msg,
                                  WPARAM wParam,
                                  LPARAM lParam)
{
        switch (Msg)
        {
        case WM_CLOSE:
                if(MessageBox(hWnd,"你要關閉窗口嗎?","提示!",MB_OKCANCEL) == IDOK)
                        DestroyWindow(hWnd);
                break;
        case WM_DESTROY:
                PostQuitMessage(0);
                break;
        default:
                return DefWindowProc(hWnd,Msg,wParam,lParam);
        }
        return 0;
}

//主函數
int WINAPI WinMain(
                                   HINSTANCE hInstance,
                                   HINSTANCE hPrevInstance,
                                   LPSTR lpCmdLine,
                                   int nShowCmd)
{
        WNDCLASS wndcls;
        wndcls.cbClsExtra = 0;
        wndcls.cbWndExtra = 0;
        wndcls.hbrBackground = (HBRUSH)GetStockObject(WHITE_PEN);
        wndcls.hCursor = LoadCursor(NULL,IDC_ARROW);
        wndcls.hIcon = LoadIcon(NULL,IDI_APPLICATION);
        wndcls.hInstance = hInstance;
        wndcls.lpfnWndProc = myWndProc;
        wndcls.lpszClassName = "123";
        wndcls.lpszMenuName = NULL;
        wndcls.style = CS_HREDRAW | CS_VREDRAW;

        RegisterClass(&wndcls);

        HWND hWnd = CreateWindow("123","標題",WS_OVERLAPPEDWINDOW
                | WS_VISIBLE,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,
                CW_USEDEFAULT,NULL,NULL,hInstance,NULL);
        //消息循環
        MSG Msg;
        while(GetMessage(&Msg,hWnd,NULL,NULL))
        {
                TranslateMessage(&Msg);
                DispatchMessage(&Msg);
        }

        return 0;
}

 

然后在貼一個運行后的圖

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM