我的程序不需要任何窗口(它只需要文件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的链接。它似乎运行良好,但这是不好的做法/它会导致任何不可预见的问题吗?
答案 0 :(得分: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
。这是一个完全不同的话题,已在本网站上广泛报道。
答案 1 :(得分:-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;
}
答案 2 :(得分:-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