C win32应用程序可以编译和链接,但只显示进程。为什么?

C win32应用程序可以编译和链接,但只显示进程。为什么?,c,winapi,visual-studio-2013,C,Winapi,Visual Studio 2013,有可以编译和链接,但我什么也看不到,但进程。为什么? 我已经下载了另一个类似的地雷,但这显示我的窗口。我很困惑 #include<windows.h> #include<stdio.h> LRESULT CALLBACK WinSunProc(//可以通过MSDN查看回调函数的声明方式 HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam ); int WINAPI WinMain( HINSTANCE hInstance,

有可以编译和链接,但我什么也看不到,但进程。为什么? 我已经下载了另一个类似的地雷,但这显示我的窗口。我很困惑

#include<windows.h>
#include<stdio.h>
LRESULT CALLBACK WinSunProc(//可以通过MSDN查看回调函数的声明方式
HWND hwnd,
UINT uMsg,
WPARAM wParam,
LPARAM lParam
);
int WINAPI WinMain(
HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow
){
WNDCLASS wndcls;//设计一个窗口类
wndcls.cbClsExtra = 0;
wndcls.cbWndExtra = 0;
wndcls.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);//黑色的刷子
wndcls.hCursor = LoadCursor(NULL, IDC_CROSS);
wndcls.hIcon = LoadIcon(NULL, IDI_ERROR);//窗口上面是应用程序的图标
wndcls.hInstance = hInstance;
wndcls.lpfnWndProc = WinSunProc;/窗口过程函数。回调函数
wndcls.lpszClassName = "First MFC";//类名
wndcls.lpszMenuName = NULL; //没有菜单
wndcls.style = CS_HREDRAW | CS_VREDRAW;//CS:类的样式---水平重绘、垂直重绘
RegisterClass(&wndcls);//注册窗口
HWND hwnd;//创建窗口
hwnd = CreateWindow("MFC", "JLU", WS_OVERLAPPEDWINDOW, 0, 0, 600, 400, NULL, NULL, hInstance, NULL);
ShowWindow(hwnd, SW_SHOWNORMAL);//显示窗口
UpdateWindow(hwnd);
MSG msg;//消息循环机制
while (GetMessage(&msg, NULL, 0, 0)){
    TranslateMessage(&msg);
    DispatchMessage(&msg);
}
return 0;
}
LRESULT CALLBACK WinSunProc(HWND hwnd,
UINT uMsg,
WPARAM wParam,
LPARAM lParam
)
{
HDC hDC;                              //Device Context的句柄
switch (uMsg)                       //针对不同消息处理过程
{
case WM_PAINT:                  //窗口重绘时,触发的消息
    PAINTSTRUCT ps;
    hDC = BeginPaint(hwnd, &ps);              //BeginPaint/EndPaint只能用在WM_PAINT消息中
    TextOut(hDC, 50, 50, "This is first MFC Program!", strlen("This is first MFC Program!"));
    EndPaint(hwnd, &ps);
    break;
    case WM_CHAR:                 //按下键盘字母键响应消息
    char cArry[20];
    memset(cArry, 0, 20);
    sprintf(cArry, "char is %d", wParam);
    MessageBox(hwnd, cArry, "WM_CHAR", MB_OKCANCEL);
    break;
    case WM_LBUTTONDOWN:
    MessageBox(hwnd, "LeftMouse Click", "WM_LBUTTONDOWN", MB_OKCANCEL);
    hDC = GetDC(hwnd);
    TextOut(hDC, 50, 100, "MFC Program!", strlen("MFC Program!"));
    ReleaseDC(hwnd, hDC);
    break;
    case WM_CLOSE:
    if (IDOK == MessageBox(hwnd, "是否真的要退出?", "提示", MB_OKCANCEL))
    {
        DestroyWindow(hwnd);                     //销毁窗口,同时发送WM_DESTROY消息
    }
    break;
    case WM_DESTROY:
    PostQuitMessage(0);                            //发送WM_QUIT消息
    break;
    default:
    return DefWindowProc(hwnd, uMsg, wParam, lParam);            //对待不关心的消息,采用默认方式处理
}

return 0;
}
我发布了WINMAIN和回调函数,但没有发现任何错误。请帮我解决这个问题。

首先,它不是MFC应用程序。这只是一个用C编写的非常简单的Win32应用程序

据我所知,WindowProc函数是WinQinProc,但由于某些原因,您确实向WinSunProc注册了窗口类。这是你的第一个问题。另一个问题是窗口类WNDCLASS的名称。请注意,您还应该使用在CreateWindow调用中注册的相同窗口类名

以下是应用程序的固定版本,其中包括tchar.h,以使应用程序能够识别UNICODE:


这是一款简单的Win32 C应用程序。这里不使用MFC。因此,请更正标题您的WindowProc函数是WinQinProc,但您确实向WinSunProc注册了窗口类。那是你的问题。可能还有其他问题。@AndrewKomiagin WinQinProc应命名为WinSunProc,但这不是问题。这是一个复制错误。很抱歉,没有问题。缩进使代码无法读取。您不执行错误检查。你的问题不是你想象的那样。在编写清晰的代码、可以阅读的代码、理解的代码以及执行正确的错误检查时,您需要放慢速度并更加小心。您需要阅读文档。这是我提到的第一个问题。你应该先修复它。请找到你的代码的修复版本和我的评论,看看哪里出了问题。做个区分,看看有什么改变/修复了。我告诉过你wndcls.lpszClassName和CreateWindow函数的第一个参数应该是相同的。我让它符合UNICODE只是为了告诉你如何做到这一点。这不是你最初的问题根源。非常感谢。我是第一次知道的。我不知道。再次谢谢
LRESULT CALLBACK WinSunProc(//可以通过MSDN查看回调函数的声明方式
    HWND hwnd,
    UINT uMsg,
    WPARAM wParam,
    LPARAM lParam);

int WINAPI WinMain(
    HINSTANCE hInstance,
    HINSTANCE hPrevInstance,
    LPSTR lpCmdLine,
    int nCmdShow
    )
{
        WNDCLASS wndcls;//设计一个窗口类
        wndcls.cbClsExtra = 0;
        wndcls.cbWndExtra = 0;
        wndcls.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);//黑色的刷子
        wndcls.hCursor = LoadCursor(NULL, IDC_CROSS);
        wndcls.hIcon = LoadIcon(NULL, IDI_ERROR);//窗口上面是应用程序的图标
        wndcls.hInstance = hInstance;
        wndcls.lpfnWndProc = WinSunProc;
        wndcls.lpszClassName = _T("MyClassName");//类名
        wndcls.lpszMenuName = NULL; //没有菜单
        wndcls.style = CS_HREDRAW | CS_VREDRAW;//CS:类的样式---水平重绘、垂直重绘
        RegisterClass(&wndcls);//注册窗口
        HWND hwnd;//创建窗口
        hwnd = CreateWindow(_T("MyClassName"), _T("JLU"), WS_OVERLAPPEDWINDOW, 0, 0, 600, 400, NULL, NULL, hInstance, NULL);
        ShowWindow(hwnd, SW_SHOWNORMAL);//显示窗口
        UpdateWindow(hwnd);
        MSG msg;//消息循环机制
        while (GetMessage(&msg, NULL, 0, 0))
        {
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }
        return 0;
}
LRESULT CALLBACK WinSunProc(HWND hwnd,
    UINT uMsg,
    WPARAM wParam,
    LPARAM lParam
    )
{
    HDC hDC;                              //Device Context的句柄
    switch (uMsg)                       //针对不同消息处理过程
    {
    case WM_PAINT:                  //窗口重绘时,触发的消息
        PAINTSTRUCT ps;
        hDC = BeginPaint(hwnd, &ps);              //BeginPaint/EndPaint只能用在WM_PAINT消息中
        TextOut(hDC, 50, 50, _T("This is first Win32 Program!"), _tcslen(_T("This is first Win32 Program!")));
        EndPaint(hwnd, &ps);
        break;
    case WM_CHAR:                 //按下键盘字母键响应消息
        char cArry[20];
        memset(cArry, 0, 20);
        // sprintf(cArry, "char is %d", wParam);
        // MessageBox(hwnd, cArry, "WM_CHAR", MB_OKCANCEL);
        break;
    case WM_LBUTTONDOWN:
        //   MessageBox(hwnd, "LeftMouse Click", "WM_LBUTTONDOWN", MB_OKCANCEL);
        hDC = GetDC(hwnd);
        TextOut(hDC, 50, 100, _T("Win32 Program!"), _tcslen(_T("Win32 Program!")));
        ReleaseDC(hwnd, hDC);
        break;
    case WM_CLOSE:
        if (IDOK == MessageBox(hwnd, _T("是否真的要退出?"), _T("提示"), MB_OKCANCEL))
        {
            DestroyWindow(hwnd);                     //销毁窗口,同时发送WM_DESTROY消息
        }
        break;
    case WM_DESTROY:
        PostQuitMessage(0);                            //发送WM_QUIT消息
        break;
    default:
        return DefWindowProc(hwnd, uMsg, wParam, lParam);            //对待不关心的消息,采用默认方式处理
    }

    return 0;
}