image

程序代码:

#include <Windows.h>

LRESULT WINAPI WindowProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam);

int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)

{

   
    WNDCLASSEX WindowClass;
    static LPCTSTR szAppName=L"OFWin";
    HWND hWnd;
    MSG msg;

    WindowClass.cbSize= sizeof(WNDCLASSEX);
   
    //
    WindowClass.style=CS_HREDRAW | CS_VREDRAW;
    WindowClass.lpfnWndProc=WindowProc;
    WindowClass.cbClsExtra=0;
    WindowClass.cbWndExtra=0;
    WindowClass.hInstance=hInstance;

    WindowClass.hIcon=LoadIcon(0,IDI_APPLICATION);

    WindowClass.hCursor= LoadCursor(0,IDC_ARROW);

    WindowClass.hbrBackground=static_cast<HBRUSH>(GetStockObject(GRAY_BRUSH));
    WindowClass.lpszMenuName=0;

    WindowClass.lpszClassName= szAppName;

    WindowClass.hIconSm=0;
    RegisterClassEx(&WindowClass);

    hWnd=CreateWindow(
        szAppName,
        L"窗口标题",
        WS_OVERLAPPEDWINDOW,
            CW_USEDEFAULT,
            CW_USEDEFAULT,
            CW_USEDEFAULT,
            CW_USEDEFAULT,
            0,
            0,
            hInstance,
            0
    );

    ShowWindow(hWnd,nCmdShow);
    UpdateWindow(hWnd);

    
    while(GetMessage(&msg,0,0,0)==TRUE)
    {

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

    }

    return static_cast<int>(msg.wParam);

}

LRESULT WINAPI WindowProc(HWND hWnd,UINT message ,WPARAM wParam,LPARAM lParam)
{

    HDC hDc;
    PAINTSTRUCT PaintSt;
    RECT aRect;

 

    switch (message)

    {
    case WM_PAINT:
        hDc= BeginPaint(hWnd,&PaintSt);

        GetClientRect(hWnd,&aRect);

        SetBkMode(hDc,TRANSPARENT);

        DrawText(hDc,
            L"画出的内容",
            -1,
            &aRect,
            DT_SINGLELINE|
            DT_CENTER|
            DT_VCENTER
            );

        EndPaint(hWnd,&PaintSt);
        return 0;

    case WM_DESTROY:
        PostQuitMessage(0);
        return 0;

    default:

        return DefWindowProc(hWnd,message, wParam,lParam);
    }

}

 

 

另外在编译的时候出现了以下问题:

MSVCRTD.lib(crtexe.obj) : error LNK2019: 无法解析的外部符号 _main,该符号在函数 ___tmainCRTStartup 中被引用

解决办法:

一,问题描述

error LNK2001: unresolved external symbol _WinMain@16
debug/main.exe:fatal error LNK 1120:1 unresolved externals
error executing link.exe;

二,产生这个问题可能的原因

1, 你用vc建了一个控制台程序,它的入口函数应该是main, 而你使用了WinMain.

2.  你用vc打开了一个.c/.cpp 文件,然后直接编译这个文件,这个文件中使用了WinMian而不是main作为入口函数。vc这时的默认设置是针对控制台程序的。

三, 解决方法

1.进入project->setting->c/c++, 在category中选择preprocessor,在processor definitions中删除_CONSOLE, 添加_WINDOWS

2.进入project->setting->Link, 在Project options中将 /subsystem:console改为/subsystem:windows.

3.保存设置,Rebuild All.

VS2005中的设置请参考对应项进行设置

四,VS2005中的设置

1.菜单中选择 Project->Properties, 弹出Property Pages窗口

2.在左边栏中依次选择:Configuration Properties->C/C++->Preprocessor,然后在右边栏的Preprocessor Definitions对应的项中删除_CONSOLE, 添加_WINDOWS.

3.在左边栏中依次选择:Configuration Properties->Linker->System,然后在右边栏的SubSystem对应的项改为Windows(/SUBSYSTEM:WINDOWS)

4.Rebuild All. Ok ?

 

解决办法引用文章 页:

http://blog.csai.cn/user1/16781/archives/2006/6412.html