2016-03-12 116 views
1

我剛開始學習編程,而且我只是成功地製作窗口。 我正在嘗試製作一個靜態文本區域,所以我喜歡這樣做。CreateWindow功能不能正常工作。視覺工作室2015

LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) 
{ 
    switch (msg) 
    { 
    textfield = case WM_CREATE: 
     CreateWindow("STATIC", "Hggggg", WS_VISIBLE | WS_CHILD | WS_BORDER, 
     1, 1, 100, 20, hwnd, 0, 0, 0); 

    break; 

我正在看初學者的YouTube視頻,我跟着視頻。但不知何故,VisualStudio會在「CreateWindow」下產生redcurvy下劃線。我不知道爲什麼。 編譯失敗,並顯示錯誤號「C2065」,「C2664」。

這是我的全部代碼

#include <Windows.h> 

HWND windowHandle; 
HWND textfield; 


int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE prevInstance, PSTR cmdLine, int showCmd) 
{ 
    WNDCLASSEX wc; 

    wc.cbSize = sizeof(WNDCLASSEX); 
    wc.cbClsExtra = 0; 
    wc.cbWndExtra = 0; 
    wc.hIconSm = 0; 

    wc.hInstance = hInstance; 
    wc.lpfnWndProc = WndProc; 
    wc.style = CS_HREDRAW | CS_VREDRAW; 
    wc.lpszClassName = L"rerere"; 
    wc.lpszMenuName = 0; 
    wc.hCursor = LoadCursor(0, IDC_ARROW); 
    wc.hIcon = LoadIcon(0, IDI_APPLICATION); 
    wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); 

    // 
    RegisterClassEx(&wc); 

    windowHandle = CreateWindowEx(WS_EX_ACCEPTFILES, L"rerere", L"rerere", 
     (WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX) | WS_VISIBLE, (GetSystemMetrics(SM_CXSCREEN)-300)/2, (GetSystemMetrics(SM_CYSCREEN)-300)/2, 300, 300, 0, 0, hInstance, 0); 

    // 

    if (windowHandle == 0) 
     MessageBoxA(0, "creafjeiwa", "ERROR", 0); 
    // 
    ShowWindow(windowHandle, showCmd); 

    // 
    UpdateWindow(windowHandle); 
    // 
    MSG msg; 

    SecureZeroMemory(&msg, sizeof(MSG)); 
    int returnValue = 0; 

    while ((returnValue = GetMessage(&msg, 0, 0, 0)) != 0) 
    { 
     if (returnValue == -1) 
     { 
      MessageBoxA(windowHandle, "getmessage fa", "ssss", 0); 
      break; 
     } 

     TranslateMessage(&msg); 
     DispatchMessage(&msg); 
    } 

    return(int)msg.wParam; 
} 

LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) 
{ 
    switch (msg) 
    { 
    case WM_CREATE: 

     textfield = CreateWindow("STATIC", "Hggggg", WS_VISIBLE | WS_CHILD | WS_BORDER, 1, 1, 100, 20, hwnd, 0, 0, 0); 
     break; 

    case WM_CLOSE: 
     DestroyWindow(hwnd); 
     break; 

    case WM_DESTROY: 
     PostQuitMessage(0); 
     break; 

    default: 
     return DefWindowProc(hwnd, msg, wParam, lParam); 

    } 
} 

我怎樣才能讓靜態文本區域?

回答

1

你的項目是採用Unicode,則必須使用Unicode文本字段,而不是ANSI

CreateWindow(L"STATIC", L"Hggggg", ... 

所有文本字段需要L前綴。如果使用ANSI,則使用ANSI版本的API代碼。您已通過MessageBoxA完成此操作。但是,將L作爲文本的前綴使用Unicode函數會更有效。

+0

WWOWWWWWWWWWWWWWWWWWWWWWW THANK THANKYOU我已經受了841小時的痛苦。謝謝! –

+0

它現在工作sooooooo罰款....在這裏你可以看到我滴淚。謝謝 。編程是如此神祕。只是把「L」放在一起就完全不同了。 –