发新话题
打印

[[ 其它 ]] 用vc打造一个仅2.5k的win32GUI程序

用vc打造一个仅2.5k的win32GUI程序

将下面的代码保存为.c文件

//-------------------------start---------------------------------

#include <windows.h>

LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
  switch (message)
  {
      case WM_DESTROY:
          PostQuitMessage (0);
          break;
      default:
          return DefWindowProc (hwnd, message, wParam, lParam);
  }
  return 0;
}

void WinEntry()
{
  HWND hwnd;
  MSG messages;
  WNDCLASSEX wincl;
  STARTUPINFO spinfo;
  HINSTANCE hInst=GetModuleHandle(NULL);
  wincl.hInstance = hInst;
  wincl.lpszClassName = "minitest";
  wincl.lpfnWndProc = WindowProcedure;
  wincl.style = CS_DBLCLKS;
  wincl.cbSize = sizeof (WNDCLASSEX);
  wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION);
  wincl.hIconSm = LoadIcon (NULL, IDI_APPLICATION);
  wincl.hCursor = LoadCursor (NULL, IDC_ARROW);
  wincl.lpszMenuName = NULL;
  wincl.cbClsExtra = 0;
  wincl.cbWndExtra = 0;
  wincl.hbrBackground = (HBRUSH)COLOR_BACKGROUND;
  if(!RegisterClassEx(&wincl))
  goto exit;
  hwnd = CreateWindowEx(0,wincl.lpszClassName, "test window",WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,544,375,HWND_DESKTOP,NULL,hInst,NULL);
  if(!hwnd)
  goto exit;
  GetStartupInfo(&spinfo);
  ShowWindow(hwnd,spinfo.wShowWindow);
  while (GetMessage (&messages, NULL, 0, 0))
  {
    TranslateMessage(&messages);
    DispatchMessage(&messages);
  }
  exit:ExitProcess(0);
}

//-------------------------end---------------------------

用vc打开,“编译”-“构件”,vc会提示建立一个“default project workspace”,选择“是”。然后在“工程”-“设置”里选择“link”选项卡,将“output”中的“EntryPoint”设置为“WinEntry”,在界面下方的“project option”中找到“/subsystem:console”,改为“/subsystem:windows”,再增加一个参数“/align:4096”。最后选择“release”发布,编译器会警告:“LINK : warning LNK4108: /ALIGN specified without /DRIVER or /VXD; image may not run”,不用理会它。现在你就可以在“release”文件夹下找一个2560字节的win32 GUI程序了。
该代码在windows 2000 sp3 + vc 6.0下编译通过。

TOP

发新话题