VC++深入详解(chapter 1)笔记

 

#include <windows.h>

#include <stdio.h>

LRESULT CALLBACK WinSunProc(
       HWND hwnd,
       UINT uMsg,
       WPARAM wParam,
       LPARAM lParam
       );
int WINAPI WinMain(
       HINSTANCE hInstance,
       HINSTANCE hPreInstance,
       LPSTR lpSmdLine,   //command line
       int nCmdShow          //show state
       )
{
 //(1)design a window
 WNDCLASS wnd;
 wnd.cbClsExtra = 0;
 wnd.cbWndExtra = 0;
 //这两个参数规定类的额外需要的保存的空间的大小值,就好像你设计了一个窗口类
 //然后定义了一个窗口的基本特征之后,还想把这个类进行个性化处理
 //比如说你想用一个BOOL标记这个类的对象窗口是否带有背景音乐功能,你的cbClsExtra
 //的大小就应该设为sizeof(BOOL)
 //然后你的窗口可以指定其有一个保存内存的大小,比如说你想通过一个字符串来指定背景音乐的路径
 //这是你的cbWndExtra的值可以设置为一定大小,你的音乐字符串大小不能超过此值
 wnd.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); //窗口的背景色
 wnd.hCursor = LoadCursor(NULL,IDC_WAIT); 
 //在Windows中,有各种各样的资源(窗口,图标,光标等),系统在创建这些资源时会为它们分配内存
 //并返回标识这些资源的标识号,即句柄。
 wnd.hIcon = LoadIcon(NULL,IDI_ERROR);
 wnd.hInstance = hInstance;  //窗口的句柄
 wnd.lpfnWndProc = WinSunProc;  //这个函数主要是制定消息处理函数。
 wnd.lpszClassName = "zju";
 wnd.lpszMenuName = NULL;
 wnd.style = CS_HREDRAW | CS_VREDRAW;  //表示窗口所能进行的操作。
   
 //(2) register a window
 RegisterClass(&wnd);
 
 //(3)create a window

 HWND hwnd;
 //窗口是通过窗口句柄(HWND)来标识的,要是对某个窗口进行操作时,首先要得到这个窗口的句柄

 hwnd = CreateWindow("zju","micropt",WS_OVERLAPPEDWINDOW,0,0,400,400,NULL,NULL,hInstance,NULL);

 //(4) show and update a window

 ShowWindow(hwnd,SW_SHOW);

 UpdateWindow(hwnd);

 //(5)Define  message structure,Start  message loop
 MSG msg;
 //当GetMessage函数接收到WM_QUIT时,其返回值为假,这样就退出了消息循环
 // WM_QUIT是由PostQuitMessage(0)产生的,注意这一系列的调用的关系。

 while(GetMessage(&msg,NULL,0,0))
 {
  TranslateMessage(&msg);
  //函数功能:该函数将虚拟键消息转换为字符消息。字符消息被寄送到调用线程的消息队列里,当下一次线程调用函数GetMessage或PeekMessage时被读出。
  DispatchMessage(&msg);
  //函数功能:该函数分发一个消息给窗口程序。通常消息从GetMessage函数获得。消息被分发到回调函数(过程函数),
  //作用是消息传递给操作系统,然后操作系统去调用我们的回调函数,也就是说我们在窗体的过程函数中处理消息


  //当我们敲击键盘上的某个字符键时,系统会产生WM_KEYDOWN和WM_KEYUP消息,当这两个消息的附加参数(wParam和lParam)包含
  //的是虚拟代码和扫描码等消息,而我们在程序中往往需要得到某个字符的ASCII码,TranslateMessage这个函数可以将WM_KEYDOWN和
  //WM_KEYUP消息组合转换为一条WM_CHAR消息(该消息的wParam附加参数包含了字符的ASCII码),并将转换后的新消息投递到调用线程的消息
  //队列中
 }


 return msg.wParam;


}

LRESULT CALLBACK WinSunProc(
       HWND hwnd,
       UINT uMsg,
       WPARAM wParam,
       LPARAM lParam
       )
{
 switch (uMsg)
 {
 case WM_CHAR:
  char szChar[20];
  sprintf(szChar,"char code is %d",wParam);
  MessageBox(hwnd,szChar,"char",0);
  break;
 case WM_LBUTTONDOWN:
  MessageBox(hwnd,"Mouse click","Message",0);
  HDC hdc;
  hdc= GetDC(hwnd);
  //设备描述表(Device Context)简称DC
  //DC是一个包含设备(物理输出设备,如显示器,以及设备驱动程序)信息的结构体
  //在Windows平台下,所有的物理图形操作都是利用DC来完成的。
  TextOut(hdc,0,0,"china",strlen("china"));
  ReleaseDC(hwnd,hdc);
  break;
  //当移动窗口时,窗口就会发出WM_PAINT消息

 case WM_PAINT:
  HDC hDc;
  PAINTSTRUCT ps;
  hDc = BeginPaint(hwnd,&ps);
  TextOut(hDc,0,50,"zhejiang",strlen("zhejiang"));
  EndPaint(hwnd,&ps);
  break;
 case WM_CLOSE:
  if(IDYES == MessageBox(hwnd,"Are you want to close your window","NOTICE",MB_YESNO | MB_ICONQUESTION))
  {
   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、付费专栏及课程。

余额充值