2015-11-13 86 views
-1

winMain是一個默認的主函數沒有別的。包含在其中的window.cpp包含在其中。爲什麼我的win32多邊形不工作?

沒有多邊形的代碼可以被編譯和一個簡單的窗口顯示。 但是當我想繪製多邊形我收到以下錯誤信息:

D:\...\window.cpp|| undefined reference to `[email protected]'| 

試圖找到多邊形的實現,但我的IDE(代碼塊)無法找到它。

window.cpp

#include "window.h" 

LRESULT CALLBACK window::windproc(HWND hMain, UINT msg, WPARAM wParam, LPARAM lParam) 
// PROCEDURE OF THE MAIN WINDOW 
{ 
    HDC hdc; 
    PAINTSTRUCT ps; 
    POINT pt[3]; 
     pt[0].x = 300; 
     pt[0].y = 200; 
     pt[1].x = 350; 
     pt[1].y = 100; 
     pt[2].x = 400; 
     pt[2].y = 200; 

    switch(msg) 
    { 
    case WM_PAINT: 
      hdc = BeginPaint(hMain,&ps); 
      Polygon(hdc,pt,3); 
      EndPaint(hMain,&ps); 
     break; 
    case WM_MBUTTONDOWN: 
     PostQuitMessage(0); 
     break; 
    case WM_DESTROY: 
     PostQuitMessage(0); 
     break; 
    default: 
     return DefWindowProc (hMain, msg, wParam, lParam); 
    } 

    return 0; 
} 

void center_window(HWND main) 
{ 
    RECT rc; 
    GetClientRect(main, &rc); 
    int xPos = (GetSystemMetrics(SM_CXSCREEN) - rc.right)/2; 
    int yPos = (GetSystemMetrics(SM_CYSCREEN) - rc.bottom)/2; 
    SetWindowPos(main, 0, xPos, yPos, 0, 0, SWP_NOZORDER | SWP_NOSIZE); 
} 

void check_return(HWND main) 
{ 
    if(!main) 
     MessageBox(main, __FILE__, "ERROR", MB_OK | MB_ICONERROR); 
} 

在window.h

#include <windows.h> 

class window 
{ 
public: 
    class invalid{}; // to throw an exception 

    window(){} 
    ~window(){} 

    LPCSTR label{"main"}; 
    LPCSTR title{"Placeholder"}; 


    static LRESULT CALLBACK windproc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam); 
}; 

// AUX FUNCTIONS 
void center_window(HWND hwnd); 
void check_return(HWND hwnd); 
+0

這是一個鏈接器錯誤,顯示你的代碼不能幫助我們幫助你。鏈接gdi32。 –

回答

0

一個辦法,找出該庫提供一個給定的功能,是檢查documentation

該文件顯示Polygongdi32.lib提供。

顯然,您使用的編譯器默認情況下並未與該庫鏈接,因此將其添加。


關於

window.cpp包含在裏面

#include實現文件。包含標題。分別編譯實現文件並與它們鏈接(在IDE項目中,將所有實現文件都包含在項目中就足夠了)。

關於

WinMain函數是一個默認的主要功能

只需使用標準main:有一個在使用微軟的非標準無畸形優勢。使用微軟工具(這在g ++中不需要)將/entry:mainCRTStartup添加到鏈接器選項中。您可以在入口點鏈接器選項中指定它。

+0

我在嘗試但沒有成功。我看到了文檔。如果我做了一個項目並鏈接那個文件,我得到'ld.exe ||找不到-lgdi32.lib |'錯誤。相同的入口選項 – Frank

+0

好吧,我創建了一個新的項目,包括int主文件我自己的window.h,我只將cpp添加到項目....現在它的作品....它令人討厭,我不知道爲什麼 – Frank

+0

使用'main'也沒有優勢。事實上,使用'main'作爲具有GUI的應用程序的入口點有很多缺點。首先,你必須在鏈接器中設置'/ SUBSYSTEM:CONSOLE',操作系統將爲你分配一個控制檯。如果你仍然使用'SUBSYSTEM:WINDOWS',並且強制你的'main'函數作爲入口點,那麼你會破壞CRT。使用'WinMain'有一個顯着的優點:你將獲得啓動應用程序的模塊的'HINSTANCE',並且在你需要時不必查詢它。 – IInspectable