现在的位置: 首页 > 综合 > 正文

C语言创建窗口

2018年01月24日 ⁄ 综合 ⁄ 共 1681字 ⁄ 字号 评论关闭

        要创建窗口,首先需要注册一个窗口类,而窗口类又需要窗口过程来处理窗口消息

#include <windows.h>

LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);  // 窗口过程

int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int iCmdShow) {  static TCHAR szAppName[] = TEXT("Hello Windows");  HWND hwnd;  MSG msg;  WNDCLASS wndclass;    // 以下是窗口类  wndclass.style = CS_HREDRAW|CS_VREDRAW;    wndclass.lpfnWndProc = WndProc;  // 窗口过程  wndclass.cbClsExtra = 0;  wndclass.cbWndExtra = 0;  wndclass.hInstance = hInstance;  wndclass.hIcon = LoadIcon(NULL,IDI_APPLICATION);  wndclass.hCursor = LoadCursor(NULL,IDC_ARROW);  wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);  wndclass.lpszMenuName = NULL;  wndclass.lpszClassName = szAppName;    // 注册窗口类  if ( !RegisterClass(&wndclass))  {   MessageBox(NULL,TEXT("This programe requires Windows NT!"),szAppName,MB_ICONERROR);   return 0;  }    // 创建窗口  hwnd = CreateWindow(szAppName,szAppName,WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,hInstance,NULL);    // 显示窗口  ShowWindow(hwnd,iCmdShow);  // 更新窗口  UpdateWindow(hwnd);    // 消息循环  while(GetMessage(&msg,NULL,0,0))  {   TranslateMessage(&msg);   DispatchMessage(&msg);  }

 return msg.wParam; }

// 窗口过程 LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam) {  HDC hdc;  PAINTSTRUCT ps;  RECT rect;

 switch(message)  {  case WM_CREATE:   //PlaySound(TEXT("hellowin.wav"),NULL,SND_FILENAME|SND_ASYNC);   return 0;  case WM_PAINT:   hdc = BeginPaint(hwnd,&ps);   GetClientRect(hwnd,&rect);   DrawText(hdc,    TEXT("Hello An,Welcome to the world of Windows!"),    -1,    &rect,    DT_SINGLELINE|DT_CENTER|DT_VCENTER);   EndPaint(hwnd,&ps);   return 0;  case WM_DESTROY:   PostQuitMessage(0);   return 0;  }

 return DefWindowProc(hwnd,message,wParam,lParam); // 其他时间的默认处理方法,必须要有 }

以下是运行截图:

抱歉!评论已关闭.