soulmachine 发表于 2013-1-27 06:11:35

请高人改写GUI版本的Hello world!

改这个程序好久,没有头绪,请圈子里的老大给个示范。要保持是Unicode版本,没有黑黑的控制台。
C++代码如下,在Visual Studio 2005下编译通过:
#include <windows.h><windows.h></windows.h>
#include <tchar.h><tchar.h></tchar.h>
/*  Declare Windows procedure  */
LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);
int WINAPI WinMain (HINSTANCE hThisInstance,
     HINSTANCE hPrevInstance,
     LPSTR lpszArgument,
     int nCmdShow)
{
 /*  Make the class name into a global variable  */
 TCHAR szClassName[ ] = TEXT("HelloWorld");
 HWND hwnd;               /* This is the handle for our window */
 MSG messages;            /* Here messages to the application are saved */
 WNDCLASSEX wincl;        /* Data structure for the windowclass */
 /* The Window structure */
 wincl.hInstance = hThisInstance;
 wincl.lpszClassName = szClassName;
 wincl.lpfnWndProc = WindowProcedure;      /* This function is called by windows */
 wincl.style = CS_HREDRAW | CS_VREDRAW;    /* Catch double-clicks */
 wincl.cbSize = sizeof (WNDCLASSEX);
 /* Use default icon and mouse-pointer */
 wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION);
 wincl.hIconSm = LoadIcon (NULL, IDI_APPLICATION);
 wincl.hCursor = LoadCursor (NULL, IDC_ARROW);
 wincl.lpszMenuName = NULL;                 /* No menu */
 wincl.cbClsExtra = 0;                      /* No extra bytes after the window class */
 wincl.cbWndExtra = 0;                      /* structure or the window instance */
 /* Use Windows's default colour as the background of the window */
 wincl.hbrBackground = (HBRUSH) COLOR_BACKGROUND;
 /* Register the window class, and if it fails quit the program */
 if (!RegisterClassEx (&wincl))
  return 0;
 /* The class is registered, let's create the program*/
 hwnd = CreateWindowEx (
  0,                   /* Extended possibilites for variation */
  szClassName,         /* Classname */
  TEXT("SDK Verision"),       /* Title Text */
  WS_OVERLAPPEDWINDOW, /* default window */
  CW_USEDEFAULT,       /* Windows decides the position */
  CW_USEDEFAULT,       /* where the window ends up on the screen */
  CW_USEDEFAULT,                 /* The programs width */
  CW_USEDEFAULT,                 /* and height in pixels */
  NULL,        /* The window is a child-window to desktop */
  NULL,                /* No menu */
  hThisInstance,       /* Program Instance handler */
  NULL                 /* No Window Creation data */
  );
 /* Make the window visible on the screen */
 ShowWindow (hwnd, nCmdShow);
 /* Run the message loop. It will run until GetMessage() returns 0 */
 while (GetMessage (&messages, NULL, 0, 0))
 {
  /* Translate virtual-key messages into character messages */
  TranslateMessage(&messages);
  /* Send message to WindowProcedure */
  DispatchMessage(&messages);
 }
 /* The program return-value is 0 - The value that PostQuitMessage() gave */
 return messages.wParam;
}

/*  This function is called by the Windows function DispatchMessage()  */
LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
 HDC  hdc;
 PAINTSTRUCT ps;
 RECT  rect;
 TCHAR  szHello[] = TEXT("Hello world!");
 switch (message)                  /* handle the messages */
 {
 case WM_PAINT:
  hdc = BeginPaint(hwnd,&ps); //begin painting
  GetClientRect(hwnd,&rect); //get the size of client area
  DrawText(hdc,szHello,_tcslen(szHello),&rect,DT_CENTER); //show "hello world"
  EndPaint(hwnd,&ps); //end painting
  break;
 case WM_DESTROY:
  PostQuitMessage (0);       /* send a WM_QUIT to the message queue */
  break;
 default:                      /* for messages that we don't deal with */
  return DefWindowProc (hwnd, message, wParam, lParam);
 }
 return 0;
}
页: [1]
查看完整版本: 请高人改写GUI版本的Hello world!