2016-03-12 146 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”放在一起就完全不同了。 –