2014-06-29 122 views
-2

我有這兩個錯誤,不能修復他們我試過的東西。我運行Windows 8.1窗口編程設置窗口

錯誤1錯誤C3861: 'InitMainWindow':標識符找不到

錯誤2錯誤C2440: '=':不能從「LRESULT轉換(__stdcall *)(HWND,WPARAM,LPARAM) '到 'WNDPROC'

代碼:

#include <windows.h> // include the basic windows header file 

bool InitMainWindow(HINSTANCE, int); 

LRESULT CALLBACK MsgProc(HWND UINT, WPARAM, LPARAM); 

const int width = 800; 
const int height = 600; 

HWND hwnd = NULL; 

// the entry point for any Windows program 
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int  nCmdShow) 
{ 
    if (!InitMainWindow(hInstance, nCmdShow)) 
     return 1; 

    MSG msg = { 0 }; 
    while (WM_QUIT != msg.message) 
    { 
     if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) 
     { 
      TranslateMessage(&msg); 
      DispatchMessage(&msg); 
     } 
     return static_cast<int>(msg.wParam); 
    } 
} 

bool InitMainWindow(HINSTANCE hInstance, int nCmdShow) 
{ 
    WNDCLASSEX wcex; 

    wcex.cbSize = sizeof(wcex); 
    wcex.style = CS_HREDRAW | CS_VREDRAW; 
    wcex.cbClsExtra = 0; 
    wcex.cbWndExtra = 0; 
    wcex.lpfnWndProc = MsgProc; 
    wcex.hInstance = hInstance; 
    wcex.hIcon = LoadIcon(NULL, IDI_APPLICATION); 
    wcex.hCursor = LoadCursor(NULL, IDC_ARROW); 
    wcex.hbrBackground = (HBRUSH)GetStockObject(NULL_BRUSH); 
    wcex.lpszClassName = NULL; 
    wcex.lpszMenuName = NULL; 
    wcex.hIconSm = LoadIcon(NULL, IDI_WINLOGO); 

    if (!RegisterClassEx(&wcex)) 
     return false; 

    hwnd = CreateWindow (
     NULL, 
     NULL, 
     WS_OVERLAPPED | WS_SYSMENU | WS_CAPTION, 
     GetSystemMetrics(SM_CXSCREEN)/2 - width/2, 
     GetSystemMetrics(SM_CYSCREEN)/2 - height/2, 
     width, 
     height, 
     (HWND)NULL, 
     (HMENU)NULL, 
     hInstance, 
     (LPVOID*)NULL); 

    if (!hwnd) 
     return false; 
    ShowWindow(hwnd, nCmdShow); 
    return true; 

} 

LRESULT CALLBACK MsgProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) 
{ 
    switch (msg) 
    { 
    case WM_DESTROY: 
     PostQuitMessage(0); 
     return 0; 
    case WM_CHAR: 
     switch (wParam) 
     { 

     case VK_ESCAPE: 
      PostQuitMessage(0); 
      return 0; 
     } 
     return 0; 
    } 
    return DefWindowProc(hwnd, msg, wParam, lParam); 
} 

回答

3

你錯過了你的MsgProc聲明逗號。

你有

LRESULT CALLBACK MsgProc(HWND UINT, WPARAM, LPARAM); 

該聲明的函數有一個名爲UINT的HWND。

你需要

LRESULT CALLBACK MsgProc(HWND, UINT, WPARAM, LPARAM); 

在此之後,它編譯罰款。