自学vc6.0个人总结(LESSON1)

(1)Windows应用程序内部运行原理
 
          
 
Windows应用程序,操作系统,计算机硬件直接的相互关系:(消息,过程函数)
操作系统可以对硬件进行控制,比如显卡声卡发声,但操作系统又不知道何时发出什么样的声音,这时就需要我们应用程序告知;应用程序是通过调用函数来告知操作系统怎么工作的,通常我们把这些系统调用函数的集合叫做应用程序接口(API),一般来说,操作系统能够完成一个特定的功能都提供一个调用函数,当我们敲击键盘或点击鼠标的时候,操作系统能够感应到硬件的输入,但应用程序不能直接知道,要通过操作系统给它发送消息(MSG),操作系统把每一个事件都创造成一个消息结构,放入消息队列(先进先出)中,应用程序从消息队列中获取消息,但应用程序不能直接做出相应的动作,只能把消息翻译传递给过程函数,操作系统根据过程函数完成相应任务。
(2)一个入口WinMain函数的实现
窗口的创建过程:
1.设计一个窗口类;
2.注册这个窗口类;
3.创建窗口;
4.显示和更新窗口。
具体实现:
 
先创建一个Win32 Application空项目,再创建一个c++源文件;代码如下:

#include <windows.h>
#include <stdio.h>
LRESULT CALLBACK WinXuProc(       //过程函数申明
       HWND hwnd,      // handle to window
       UINT uMsg,      // message identifier
       WPARAM wParam,  // first message parameter
       LPARAM lParam   // second message parameter
       );

int WINAPI WinMain(              //主函数
       HINSTANCE hInstance,  // handle to current instance
       HINSTANCE hPrevInstance,  // handle to previous instance
       LPSTR lpCmdLine,      // pointer to command line
       int nCmdShow )// show state of window);
{
 WNDCLASS wndcls;  //创建一个窗口类
 wndcls.cbClsExtra=NULL; //设计窗口
 wndcls.cbWndExtra=NULL;
 wndcls.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
 wndcls.hCursor=LoadCursor(NULL,IDC_ARROW);
 wndcls.hIcon=LoadIcon(NULL,IDI_ERROR);
 wndcls.hInstance=hInstance;
 wndcls.lpfnWndProc=WinXuProc;
 wndcls.lpszClassName="xumin2012";
 wndcls.lpszMenuName=NULL;
 wndcls.style=CS_HREDRAW | CS_VREDRAW;
 RegisterClass(&wndcls);  //注册窗口类
 HWND hwnd;
 hwnd= CreateWindow("xumin2012",“www.baidu.com",WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,  //创建一个窗口
  CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,hInstance,NULL);
 ShowWindow(hwnd,SW_SHOWNORMAL); //显示窗口
 UpdateWindow(hwnd);//更新窗口
 MSG msg; 创建消息
 while(GetMessage(&msg,hwnd,0,0)) //消息循环(如果GetMessage返回的不是0的数,将一直死循环)
 {
  TranslateMessage(&msg);
  DispatchMessage(&msg);
 }
 return 0;
}
 
 LRESULT CALLBACK WinXuProc(//具体过程函数的实现
  HWND hwnd,      // handle to window
  UINT uMsg,      // message identifie
  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(NULL,"char input","char",MB_OK); //其实MB_OK是一个宏定义,他的值为0,要知道宏的应用
   
   break;
  case WM_PAINT:
   HDC hDc;          
   PAINTSTRUCT ps;
   hDc=BeginPaint(hwnd,&ps);
   TextOut(hDc,30,40,"我是IT小小鸟",strlen("我是IT小小鸟"));
   EndPaint(hwnd,&ps);
   break;
  case WM_LBUTTONDOWN:
   MessageBox(hwnd,"clicked down","mouse",0);
   HDC hdc;
   hdc=GetDC(hwnd);
   TextOut(hdc,30,40,"key left",strlen("key left"));
   break;
  case WM_CLOSE:
   if(IDYES==MessageBox(NULL,"是否关闭消息框?","提醒",MB_YESNO))
   {
    DestroyWindow(hwnd);
   }
   
   break;
  case WM_DESTROY:
   PostQuitMessage(0);
   break;
  default :
   return DefWindowProc(hwnd,uMsg,wParam,lParam);
  }
  
  return 0;
 }
 
 

 

 

 


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值