目录。孙鑫vc++讲座笔记(1)windows程序内部运行机制 1
小王vc++讲座笔记(2)c++ 5
小王vc++讲座笔记(3)mfc程序框架的剖析 8
小王vc++讲座笔记(4)mfc消息映射机制的剖析 14
小王vc++讲座笔记-(5)文本编程 17
小王vc++讲座笔记(6)菜单编程 20
1,windows程序设计是种事件驱动方式的程序设计,主要基于消息的。当用户需要完成某种功能时,需要调用os某种支持,然后os将用户的需要包装成消息,并投入到消息队列中,最后应用程序从消息队列中取走消息并进行响应。
2,消息结构:
typedef struct tagmsg { msg
hwnd hwnd; /接收消息的窗口句柄。和哪个窗口相关联。
uint message; /消息标识。消息本身是什么。
wparam wparam; /消息的附加信息。具体取决于消息本身。
lparam lparam;
dword time; /消息投递时间。
point pt; /消息投递时,光标在屏幕上的位置。
msg;
3,消息队列:
每个应用程序os都为它建立一个消息队列,消息队列是个先进先出的缓冲区,其中每个元素都是一个消息,os将生成的每个消息按先后顺序放进消息队列中,应用程序总是取走当前消息队列中的第一条消息,应用程序取走消息后便知道用户的操作和程序的状态,然后对其处理即消息响应,消息响应通过编码实现。
4,使用vc编程除了良好的c基础外还需要掌握两方面:
一,消息本身。不同消息所代表的用户操作和应用程序的状态。
二,对于某个特定的消息来说,要让os执行某个特定的功能去响应消息。
5,window程序入口:
int winapi winmain(
hinstance hinstance, /当前事例句柄。
hinstance hprevinstance, /先前事例句柄。
lpstr lpcmdline, /命令行指针。
int ncmdshow //窗口)显示的状态。
说明:winmain函数是windows程序入口点函数,由os调用,当os启动应用程序的时候,winmain函数的参数由os传递的。
6,创建一个完整的窗口需要经过下面四个操作步骤:
一,设计一个窗口类;如:wndclass wndcls;
二,注册窗口类; 如:registerclass(&wndcls);
三,创建窗口; 如:createwindow(),createwindowex();
四,显示及更新窗口。如:showwindow(),updatewindow();
说明:创建窗口的时候一定要基于已经注册的窗口类。
7,windows提供的窗口类:
typedef struct _wndclass {
uint style; /窗口的类型。
wndproc lpfnwndproc; /窗口过程函数指针(**函数)
int cbclsextra; /窗口类附加字节,为该类窗口所共享。通常0。
int cbwndextra; /窗口附加字节。通常设为0。
handle hinstance; /当前应用程序事例句柄。
hicon hicon; /图标句柄 loadicon();
hcursor hcursor; /光标句柄 loadcursor();
hbrush hbrbackground; /画刷句柄 (hbrush)getstockobject();
lpctstr lpszmenuname; /菜单名字。
lpctstr lpszclassname; /类的名字
wndclass;
8,窗口类注册:
atom registerclass(
const wndclass *lpwndclass //address of structure with class
// data
9,创建窗口:
hwnd createwindow(
lpctstr lpclassname, /pointer to registered class name
lpctstr lpwindowname, /pointer to window name
dword dwstyle, /window style
int x, /horizontal position of window
int y, /vertical position of window
int nwidth, /window width
int nheight, /window height
hwnd hwndparent, /handle to parent or owner window
hmenu hmenu, /handle to menu or child-window identifier
handle hinstance, /handle to application instance
lpvoid lpparam //pointer to window-creation data
10,显示和更新窗口窗口:
bool showwindow(
hwnd hwnd, /handle to window
int ncmdshow //show state of window
bool updatewindow(
hwnd hwnd //handle of window
11,消息循环:
msg msg;
while(getmessage(&msg,..从消息队列中取出一条消息。
translatemessage(&msg); 进行消息(如键盘消息)转换。
dispatchmessage(&msg);/分派消息到窗口的**函数处理,(os调用窗口**函数进行处理)。
其中:/**the getmessage function retrieves a message from the calling thread's message queue and places it in the specified structure.
/**if the function retrieves a message other than wm_quit, the return value is the function retrieves the wm_quit message, the return value is zero. if there is an error, the return value is -1.
bool getmessage(
lpmsg lpmsg, /address of structure with message
hwnd hwnd, /handle of window
uint wmsgfiltermin, /first message
uint wmsgfiltermax //last message
/the translatemessage function translates virtual-key messages into character messages. the character messages are posted to the calling thread's message queue, to be read the next time the thread calls the getmessage or peekmessage function.
bool translatemessage(
const msg *lpmsg //address of structure with message
/the dispatchmessage function dispatches a message to a window procedure.
long dispatchmessage(
const msg *lpmsg //pointer to structure with message
12,窗口过程函数(**函数)原型:
the windowproc function is an application-defined function that processes messages sent to a window. the wndproc type defines a pointer to this callback function. windowproc is a placeholder(占位符) for the application-defined function name.
lresult callback windowproc( /这里windowproc是个代号名字。
hwnd hwnd, /handle to window
uint umsg, /message identifier
wparam wparam, /first message parameter
lparam lparam //second message parameter
说明:两种函数调用约定(__stdcall 和 __cdecl):
#define callback __stdcall
/__stdcall 标准调用预定,是pascal 调用约定,象delphi使用的就是标准调用约定。
#define winapiv __cdecl
/ _cdecl 是c 语言形式的调用约定。
主要区别:函数参数传递顺序和对堆栈的清除上。
问题:除了那些可变参数的函数调用外,其余的一般都是__stdcall约定。但 c/c++编译默然的是__cdecl约定。
所以如果在vc等环境中调用__stdcall约定的函数,必须要在函数声明的时加上 __stdcall 修饰符,以便对这个函数的调用是使用__stdcall约定(如使用delphi编写的dll时候)。
vc中可通过这途径修改:project|settings..|c/c++|
培训感悟孙鑫
3.教育工作是智慧的体现。教育是心与心的沟通。想做一名优秀的教师,智慧在此有着深刻体现。面对不同性格的学生,我们需要智慧。面对不同性质的事件,我们需要智慧,面对优秀学生及学困生,我们需要智慧。面对突发事件,我们需要智慧。针对不同的状况,我们要体现出智慧,因为我们是人类灵魂的工程师。学生的教育机会,一...
VC 学习笔记
vc 1 q a 2c 语法 2 杂项 2typedef 2 switch语句 3 include的写法 4 define的用法 4 声明 4函数的整体结构 4 类 4抽象,继承,封装,多态性 5 虚函数 5纯虚函数 5 函数重载 5 const 6 指针和引用传递参数 7 this指针 8 c 构...
VC 学习笔记
vc 1 q a 2c 语法 2 杂项 2typedef 2 switch语句 3 include的写法 4 define的用法 4 声明 4函数的整体结构 4 类 4抽象,继承,封装,多态性 5 虚函数 5纯虚函数 5 函数重载 5 const 6 指针和引用传递参数 7 this指针 8 c 构...