回 帖 发 新 帖 刷新版面

主题:???问一个win窗口编译的问题

小弟我刚学windows编程,模仿书上写了一个,用DEV-C++编译运行的时候不知为什么win窗口后面还有一个DOS窗口,关闭它的话win窗口也会同时关闭
    还有我用visual c++时,编译通过了,没有错误,但是点ctrl+f5执行是会出现两个错误
LIBCD.lib(crt0.obj) : error LNK2001: unresolved external symbol _main
Debug/window.exe : fatal error LNK1120: 1 unresolved externals
Error executing link.exe.

window.exe - 2 error(s), 0 warning(s)
请高手指点下,不胜感激
代码如下:
#include <windows.h>
    LRESULT CALLBACK guocheng(
    HWND hwnd,      // handle to window
    UINT uMsg,      // message identifier
    WPARAM wParam,  // first message parameter
    LPARAM lParam   // second message parameter
    );
int WINAPI WinMain(
  HINSTANCE hInstance,  // handle to current instance
  HINSTANCE hPrevInstance,  // handle to previous instance
  LPSTR lpCmdLine,      // pointer to command line
  int nCmdShow          // show state of window
)
{
    WNDCLASS window;
    window.cbClsExtra=0;
    window.cbWndExtra=0;
    window.hbrBackground=(HBRUSH)GetStockObject(BLACK_BRUSH);
    window.hCursor=LoadCursor(NULL,IDC_APPSTARTING);
    window.hIcon=LoadIcon(NULL,IDI_APPLICATION);
    window.hInstance=hInstance;
    window.lpfnWndProc=guocheng;
    window.lpszClassName="天才";
    window.lpszMenuName=NULL;
    window.style=CS_HREDRAW|CS_VREDRAW;
    RegisterClass(&window);
    HWND hwnd;
    hwnd=CreateWindow("天才","垃圾",WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,
                       CW_USEDEFAULT,CW_USEDEFAULT,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 guocheng(
    HWND hwnd,      // handle to window
    UINT uMsg,      // message identifier
    WPARAM wParam,  // first message parameter
    LPARAM lParam   // second message parameter
    )
    {
        HDC hdc;
        PAINTSTRUCT ps;
        switch(uMsg)
        {
        case WM_PAINT:
            hdc=BeginPaint(hwnd,&ps);
            EndPaint(hwnd,&ps);
            break;
        case WM_CLOSE:
            if(IDYES==MessageBox(hwnd,"别后悔哦!","退出",MB_YESNO))
            {DestroyWindow(hwnd);
            }
            break;
        case WM_DESTROY:
            PostQuitMessage(0);
            break;
        default:
            return DefWindowProc(hwnd,uMsg,wParam,lParam);

        }
        return 0;
    }

回复列表 (共4个回复)

沙发


我一看,就猜到了,你错在那里,你首先要明白,你写的的确是正确的,代码并没有一点错误,可是,你错在了,你把代码,没有放在相应的工程里,懂了么,
这样解决:你先选NEW,建立新工程,然后选择WIN32 APPLICAITON,再选第一个,建立一个新工程,然后把你写的代码,添加进那个空的工程里头,再编译就可以完成程序了,要明白,你所写的,不再是DOS下的程序,所以,要把相应的代码加到相应的工程里去,这种错误,我最开始也有,不过现在理解了,所以就好些了

板凳

关键要分清楚gui和cui工程的区别

3 楼

IDE对不同工程,传递给编译器的参数不同。既然是窗口程序,就应该在dev-cpp中将工程的类型改为“win32 GUI”,在VC中选择“win32 application”

4 楼

选错了工程类型,从错误提示中看,它提示没有main函数,这个函数是控制台程序的入口函数,你的程序中入口点是WinMain函数,这个函数是GUI程序的入口点.说简单点,你应该建立的是Win32应用程序,而你建立的是控制台程序.可以这样改:打开VC,选择工程选项的设置,选择连接,在最下面的工程选项中,将console改成windows就行了!

我来回复

您尚未登录,请登录后再回复。点此登录或注册