孙鑫vc++ 第一课 笔记
2007-05-19 15:10
281 查看
今天开始决定好好复习了,为了能更深入更扎实掌握这一门编程技术,下了孙鑫的视频教程,感觉确实不错,说得很明白,让我有想做笔记的冲动,和大家一起分享了,但我只记我感兴趣的部分,呵呵
1、操作系统会为每个应用程序建立一个消息队列。
我以前以为windows只有一个消息队列,尽管我知道那样的话会很庞大。
2、窗口的建立过程:
1 设计窗口类
2 注册窗口
3 建立窗口
4 显示窗口
3、 GetDC(hwnd); ReleaseDC(hwnd,hdc); 成对出现,不能用于wm_paint
4、 BeginPaint(hwnd,&ps); EndPaint(hwnd,&ps); 成对出现,只能用于wm_paint
5、windows 程序基本架构
#include <windows.h> //windows 程序头文件
#include <stdio.h> //基本头文件
LRESULT CALLBACK WinSunProc( //回调函数声明
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, // 命令行参数
int nCmdShow // 程序显示方式
)
{
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)) //获取消息,wm_quit返回0,否则返回非0
{ //载入消息,哪个窗口(null为全部),消息过滤范围
TranslateMessage(&msg); //解析消息
DispatchMessage(&msg); //分派消息入回调函数
}
return 0;
}
LRESULT CALLBACK WinSunProc( //显式声明函数方式为_stdcall调用约定,参数调用顺序,堆栈操作不同
HWND hwnd, // handle to window //vc api都是_stdcall,c++默认_cdecl方式
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); //窗口句柄,字符串,窗口标题,显示方式(ok/yesno类型等)
break;
case WM_LBUTTONDOWN:
MessageBox(hwnd,"mouse clicked","weixin",0);
HDC hdc;
hdc=GetDC(hwnd); //获取主窗口画布
TextOut(hdc,0,50,"计算机编程语言培训",strlen("计算机编程语言培训")); //画布句柄,坐标,字串,字串长
ReleaseDC(hwnd,hdc); //销毁dc
break;
case WM_PAINT:
HDC hDC;
PAINTSTRUCT ps;
hDC=BeginPaint(hwnd,&ps); //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;
}
1、操作系统会为每个应用程序建立一个消息队列。
我以前以为windows只有一个消息队列,尽管我知道那样的话会很庞大。
2、窗口的建立过程:
1 设计窗口类
2 注册窗口
3 建立窗口
4 显示窗口
3、 GetDC(hwnd); ReleaseDC(hwnd,hdc); 成对出现,不能用于wm_paint
4、 BeginPaint(hwnd,&ps); EndPaint(hwnd,&ps); 成对出现,只能用于wm_paint
5、windows 程序基本架构
#include <windows.h> //windows 程序头文件
#include <stdio.h> //基本头文件
LRESULT CALLBACK WinSunProc( //回调函数声明
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, // 命令行参数
int nCmdShow // 程序显示方式
)
{
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)) //获取消息,wm_quit返回0,否则返回非0
{ //载入消息,哪个窗口(null为全部),消息过滤范围
TranslateMessage(&msg); //解析消息
DispatchMessage(&msg); //分派消息入回调函数
}
return 0;
}
LRESULT CALLBACK WinSunProc( //显式声明函数方式为_stdcall调用约定,参数调用顺序,堆栈操作不同
HWND hwnd, // handle to window //vc api都是_stdcall,c++默认_cdecl方式
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); //窗口句柄,字符串,窗口标题,显示方式(ok/yesno类型等)
break;
case WM_LBUTTONDOWN:
MessageBox(hwnd,"mouse clicked","weixin",0);
HDC hdc;
hdc=GetDC(hwnd); //获取主窗口画布
TextOut(hdc,0,50,"计算机编程语言培训",strlen("计算机编程语言培训")); //画布句柄,坐标,字串,字串长
ReleaseDC(hwnd,hdc); //销毁dc
break;
case WM_PAINT:
HDC hDC;
PAINTSTRUCT ps;
hDC=BeginPaint(hwnd,&ps); //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;
}
相关文章推荐
- 孙鑫vc学习笔记_第一课
- 孙鑫vc++学习(vs2008)笔记之第一课Windows程序运行原理
- 孙鑫老师VC++教程第一课笔记
- 孙鑫vc++ 第一课 笔记
- 孙鑫VC++讲座笔记-(2)C++
- 孙鑫VC++讲座笔记-(6)菜单编程
- 孙鑫VC++视频学习笔记-第3课
- 孙鑫vc++ 第十二课 笔记 C语言对文件读写的支持
- 孙鑫VC++笔记(六)
- 孙鑫VC学习笔记:第七讲 对话框
- 孙鑫VC++讲座笔记-(1)Windows程序内部运行机制
- 孙鑫vc学习笔记_第10课
- 孙鑫vc学习笔记_第11课_part4
- 孙鑫VC++视频学习笔记之3: MFC消息映射机制和绘图DC
- 孙鑫VC++视频学习笔记之11:图形保存和重绘
- 孙鑫VC学习笔记:第二十讲 ado数据库编程
- 孙鑫 VC++ 阅读笔记 二
- 孙鑫VC学习笔记:第十七讲 (四) 用邮槽实现进程间的通信
- 孙鑫VC学习笔记:第十五讲 (三) 增加互斥条件实现线程同步
- 孙鑫VC学习笔记:第十三讲 (三) WM_FILE_NEW消息响应原理