孙鑫vc++学习(vs2008)笔记之第一课Windows程序运行原理

<p>1.wParam、lParam附加信息,键盘按下WM_CHAR,但是并不知道按的是哪个键,需要附加信息来判断。

2.窗口的创建:要基于创建的类名,不能随意改动

3.redraw窗口重画:hredraw,vredraw

4.DC:设备描述表(Device Context,DC)是一个信息结构体,包含物理输出设备及其驱动程序。在Windows平台下,所有的的图形操作都是通过它完成。

5. if语句把常量放在前边,若为赋值编译器会报错

6.callback:回调函数。__stdcall,delphi默认的函数返回时__stdcall,vc++默认是__cdecl。

View Code
 1 #include <stdio.h>
2 #include <tchar.h>
3 #include <string.h>
4 #include <stdlib.h>
5 #include <afx.h>
6
7 LRESULT CALLBACK WinSunProc(
8 HWND hwnd, // handle to window
9 UINT uMsg, // message identifier
10 WPARAM wParam,// first message parameter
11 LPARAM lParam // second message parameter
12 );
13 int WINAPI WinMain(
14 HINSTANCE hInstance, // handle to current
15 HINSTANCE hPrevInstance,// handle to previous
16 LPSTR lpCmdLine, // command line
17 int nCmdShow // show state
18 )
19 {
20 WNDCLASS wndcls;
21 wndcls.cbClsExtra = 0;
22 wndcls.cbWndExtra = 0;
23 wndcls.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);
24 wndcls.hCursor = LoadCursor(NULL,IDC_ARROW); //光标
25 wndcls.hIcon = LoadIcon(NULL,IDI_APPLICATION); //图标
26 wndcls.hInstance = hInstance;
27 wndcls.lpfnWndProc = WinSunProc;
28 wndcls.lpszClassName = _T("2020"); //类名
29 wndcls.lpszMenuName = NULL;
30 wndcls.style = CS_HREDRAW | CS_VREDRAW;
31 RegisterClass(&wndcls);
32
33 HWND hwnd;
34 hwnd = CreateWindow(_T("2020"), //类名,一定要基于创建的类创建窗口
35 _T("相信自己!坚持!"),
36 WS_OVERLAPPEDWINDOW ,//& ~WS_MAXIMIZEBOX //窗口模式(取消最大化按钮)
37 CW_USEDEFAULT,CW_USEDEFAULT, //起始点
38 600,400, //宽高
39 NULL, //副窗口
40 NULL,hInstance,NULL); //cw:CreateWindow
41
42 ShowWindow(hwnd,SW_SHOWNORMAL); //显示窗口
43 UpdateWindow(hwnd); //刷新窗口
44
45 MSG msg;
46 while (GetMessage(&msg,NULL,0,0))
47 {
48 TranslateMessage(&msg);
49 DispatchMessage(&msg); //把消息传给操作系统,操作系统调用函数
50 }
51 return 0 ;
52 }
53
54 LRESULT CALLBACK WinSunProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam )
55 {
56 CString szChar;
57 switch (uMsg)
58 {
59 case WM_CHAR:
60 szChar.Format(_T("char is %d"),wParam);
61 //sprintf_s(szChar,"char is %d",wParam);
62 MessageBox(hwnd,szChar,_T("系统提示"),0);
63 break;
64 case WM_LBUTTONDOWN:
65 MessageBox(hwnd,_T("mouse clicked"),_T("系统提示"),0);
66 HDC hdc; //画图
67 hdc = GetDC(hwnd); //获取句柄
68 TextOut(hdc,0,50,_T("计算机编程语言培训"),strlen("计算机编程语言培训"));
69 ReleaseDC(hwnd,hdc); //释放内存
70 break;
71 case WM_PAINT: //窗口尺寸改变就会发生重绘
72 HDC hDC;
73 PAINTSTRUCT ps;
74 hDC = BeginPaint(hwnd,&ps); //为指定窗口绘画做准备,只能在WM_PAINT里面使用
75 TextOut(hDC,0,0,_T("维新培训"),strlen("维新培训"));
76 EndPaint(hwnd,&ps); //释放内存
77 break;
78 case WM_CLOSE:
79 if(IDYES == MessageBox(hwnd,_T("是否真的结束?"),_T("系统提示"),MB_YESNO)) //if语句把常量放在前边
80 DestroyWindow(hwnd);
81 break;
82 case WM_DESTROY: //此时窗口已经销毁
83 // if(IDYES == MessageBox(hwnd,_T("是否真的结束?"),_T("系统提示"),MB_YESNO))
84 PostQuitMessage(0);
85 break;
86 default:
87 return DefWindowProc(hwnd,uMsg,wParam,lParam); //缺省的窗口函数处理其他消息(必不可少)
88 }
89 return 0;
90 }

方法:新建空项目

问题:

1.fatal error C1189: #error : Building MFC application with /MD[d] (CRT dll version) requires MFC shared dll version. Please #define _AFXDLL or do not use /MD[d]

解决:项目--属性--配置属性--项目默认值--mfc的使用,改为在共享DLL中使用mfc

2.字符串要加上_T("计算机编程语言培训"),这个默认的是多字节的。。其中貌似有个char szChar[],不识别,可以用CString szChar,szChar.Format(_T("char is %d"),wParam)。CString头文件afx.h

交流学习,大家多多指导。。

顺便提供下视频下载地址http://dl.dbank.com/c0ak6m28j6;是个excel里面有网址

posted @ 2012-02-12 16:07  飞向梦  阅读(1035)  评论(2编辑  收藏  举报