一、Windows程序运行原理及程序编写流程

来源:互联网 发布:台湾火烧车事件 知乎 编辑:程序博客网 时间:2024/05/17 09:36

windows程序的执行流程如下:

1、从WinMain函数开始执行,此函数为程序的入口点;

2、设计窗口类;

3、注册窗口类;

4、创建窗口类;

5、显示及更新窗口;

6、进入消息循环,这是一个死循环,GetMessage从消息队列中获取一条消息,然后进行消息转换,再通过消息分派,将消息路由给操作系统,操作系统自动调用回调函数(消息处理函数)对消息进行处理。

7、编写回调函数。

 

以下是对实例程序的注解:

1、新建win32 aplication,命名为WinMain

2、新建c++ source file,命名为WinMain

 

代码如下:

//1、头文件

#include <windows.h>
#include <stdio.h>

 

//2、声明回调函数

LRESULT CALLBACK WinSunProc(
  HWND hwnd,      // handle to window
  UINT uMsg,      // message identifier
  WPARAM wParam,  // first message parameter
  LPARAM lParam   // second message parameter
);

 

//3、程序入口点函数winmain

int WINAPI WinMain(
  HINSTANCE hInstance,      // handle to current instance
  HINSTANCE hPrevInstance,  // handle to previous instance
  LPSTR lpCmdLine,          // command line
  int nCmdShow              // show state
)
{

//设计窗口类
 WNDCLASS wndcls;
 wndcls.cbClsExtra=0;
 wndcls.cbWndExtra=0;
 wndcls.hbrBackground=(HBRUSH)GetStockObject(BLACK_BRUSH);
 wndcls.hCursor=LoadCursor(NULL,IDC_CROSS);
 wndcls.hIcon=LoadIcon(NULL,IDI_ERROR);
 wndcls.hInstance=hInstance;
 wndcls.lpfnWndProc=WinSunProc;
 wndcls.lpszClassName="Weixin2003";
 wndcls.lpszMenuName=NULL;
 wndcls.style=CS_HREDRAW | CS_VREDRAW;

 

//注册窗口类
 RegisterClass(&wndcls);

 

//创建窗口类

 HWND hwnd;
 hwnd=CreateWindow("Weixin2003","北京维新科学技术培训中心",WS_OVERLAPPEDWINDOW,
  0,0,600,400,NULL,NULL,hInstance,NULL);

 

 

//显示及更新窗口

 ShowWindow(hwnd,SW_SHOWNORMAL);
 UpdateWindow(hwnd);

 

 

//消息循环

 MSG msg;
 while(GetMessage(&msg,NULL,0,0))
 {
  TranslateMessage(&msg);
  DispatchMessage(&msg);
 }
 return 0;
}

 

 

//消息处理函数——回调函数

LRESULT CALLBACK WinSunProc(
  HWND hwnd,      // handle to window
  UINT uMsg,      // message identifier
  WPARAM wParam,  // first message parameter
  LPARAM lParam   // second message parameter
)
{
 switch(uMsg)
 {
 case WM_CHAR:
  char szChar[20];
  sprintf(szChar,"char is %d",wParam);
  MessageBox(hwnd,szChar,"weixin",0);
  break;
 case WM_LBUTTONDOWN:
  MessageBox(hwnd,"mouse clicked","weixin",0);
  HDC hdc;
  hdc=GetDC(hwnd);
  TextOut(hdc,0,50,"计算机编程语言培训",strlen("计算机编程语言培训"));
  ReleaseDC(hwnd,hdc);
  break;
 case WM_PAINT:
  HDC hDC;
  PAINTSTRUCT ps;
  hDC=BeginPaint(hwnd,&ps);
  TextOut(hDC,0,0,"维新培训",strlen("维新培训"));
  EndPaint(hwnd,&ps);
  break;
 case WM_CLOSE:
  if(IDYES==MessageBox(hwnd,"是否真的结束?","weixin",MB_YESNO))
  {
   DestroyWindow(hwnd);
  }
  break;
 case WM_DESTROY:
  PostQuitMessage(0);
  break;
 default:
  return DefWindowProc(hwnd,uMsg,wParam,lParam);
 }
 return 0;
}

原创粉丝点击