您的位置:首页 > 编程语言 > C语言/C++

孙鑫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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: