-2

我的程序不需要任何窗口(它只是进行文件 I/O 和一些计算),我正试图使其尽可能小。我曾经一开始就拥有这一切:

WNDCLASS wc;
wc.style = 0;
wc.lpfnWndProc = WindowProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInstance;
wc.hIcon = NULL;
wc.hCursor = NULL;
wc.hbrBackground = NULL;
wc.lpszMenuName = NULL;
wc.lpszClassName = TEXT("");
RegisterClass(&wc);
HWND hwnd = CreateWindow(TEXT(""),TEXT(""),0,0,0,0,0,HWND_MESSAGE,NULL,hInstance,NULL);

我把它拿出来了,所以现在我的程序只是 WinMain 和有用的东西,没有与窗口相关的调用。我还取消了 user32.lib 的链接。它似乎运行良好,但这是不好的做法/会导致任何不可预见的问题吗?

4

3 回答 3

1

最好从“Win32 控制台应用程序”开始,默认情况下,Visual Studio 向导会为您提供一个根本不执行任何操作的基本应用程序:

#include "stdafx.h"

int _tmain(int argc, _TCHAR* argv[])
{
    return 0;
}

如您所见,Windows 应用程序根本不需要做任何事情。这同样适用于 GUI 应用程序,如果这确实是您需要的(基本区别是 GUI 项目不会在控制台窗口中启动)。尽管项目向导一开始就给你一堆乱七八糟的代码,但你可以安全地删除所有内容。一直到:

#include "stdafx.h"

int APIENTRY _tWinMain(HINSTANCE, HINSTANCE, LPTSTR, int)
{
    return 0;
}

stdafx.h文件是一个预编译头文件,基本上相当于#include <windows.h>. 但由于预编译头文件的工作方式,您必须首先包含stdafx.h。这完全是一个不同的主题,已经在这个网站上进行了广泛的介绍。

于 2012-08-20T20:22:57.340 回答
-1

不知道你删除了什么,你留下了什么。如果留下了什么,那么它可能会在未来引起干扰。

看这个简单的代码开始使用 Winmain

#include <stdio.h>
#include <Windows.h>
#pragma comment(linker,"/SUBSYSTEM:WINDOWS") 

int _stdcall WinMain( HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
{

    return 0;

}
于 2012-08-20T18:45:39.007 回答
-1

Win32 窗口的最低要求。http://www.codeproject.com/Articles/215690/Minimal-WinApi-Window

#include <windows.h>

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);

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

 MSG msg          = {0};
 WNDCLASS wc      = {0}; 
 wc.lpfnWndProc   = WndProc;
 wc.hInstance     = hInstance;
 wc.hbrBackground = (HBRUSH)(COLOR_BACKGROUND);
 wc.lpszClassName = L"minwindowsapp";
 if( !RegisterClass(&wc) )
   return 1;

 if( !CreateWindow(wc.lpszClassName,
                   L"Minimal Windows Application",
                   WS_OVERLAPPEDWINDOW|WS_VISIBLE,
                   0,0,640,480,0,0,hInstance,NULL))
    return 2;

    while( GetMessage( &msg, NULL, 0, 0 ) > 0 )
        DispatchMessage( &msg );

    return 0;
}

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{

 switch(message)
 {
   case WM_CLOSE:
     PostQuitMessage(0);
     break;
   default:
     return DefWindowProc(hWnd, message, wParam, lParam);
 }
 return 0;

} 

更多阅读:http:
//msdn.microsoft.com/en-us/library/bb384843.aspx

http://groups.engin.umd.umich.edu/CIS/course.des/cis577/lecture/win.htm

于 2012-08-20T19:37:05.217 回答