利用API函数编写程序
来源:互联网 发布:查看域名是否备案成功 编辑:程序博客网 时间:2024/04/30 17:04
(1)窗口的创建:
1>设计一个窗口类(其实是一个结构体):如:WNDCLASS wndcls;
就是为这个结构体的各个分量赋值,设计一个窗口;
2>注册窗口类:如:RegisterClass(&wndcls);
3>创建窗口:如:CreateWindow(),CreateWindowEX();
4>显示及更新窗口:如:ShowWindow(),UpdateWindow();
(2)编程实现
1>设计一个窗口类:
WNDCLASS wndcls;
wndcls.cbClsExtra=0;//类额外信息
wndcls.cbWndExtra=0;//窗口额外信息
wndcls.hbrBackground=(HBRUSH)GetStockObject(BLACK_BRUSH);//HBRUSH画刷句柄,表示用黑色的画刷
wndcls.hCursor=LoadCursor(NULL,IDC_CROSS);//NULL表示用标准光标,第二个参数为光标的形状
wndcls.hIcon=LoadIcon(NULL,IDI_ERROR);//hIcon图标句柄,利用LoadIcon赋值(第二个参数为图标的形状)
//用已有图标用LoadIcon,创建图标用CreateIcon,创建窗口用CreateWindow,销毁窗口用DestroyWindow
wndcls.hInstance=hInstance;//当前应用程序的实例号
wndcls.lpfnWndProc=WinSunProc;//函数指针,确定回调函数
wndcls.lpszClassName="Weixin2003";//设置窗口类的名字
wndcls.lpszMenuName=NULL;//设置菜单的名字
wndcls.style=CS_HREDRAW | CS_VREDRAW;//类的类型,水平重画和垂直重画
2>注册窗口类:
RegisterClass(&wndcls);//参数为窗口类结构体的指针
3>创建窗口:
HWND hwnd; //定义句柄,用以保存新建窗口的标识
hwnd=CreateWindow("Weixin2003","北京维新科学技术培训中",WS_OVERLAPPEDWINDOW,0,0,600,400,NULL,NULL,hInstance,NULL);
//参数依次表示为窗口的类名,窗口的名字,窗口的类型,窗口左上角显示的水平坐标,垂直坐标,窗口宽度,窗口高度,副窗口句柄,菜单句柄,实例的句柄, 作为附加参数传入的指针。
ShowWindow(hwnd,SW_SHOWNORMAL);//显示窗口及显示状态
UpdateWindow(hwnd);//更新窗口
4>显示及更新窗口
//消息循环
MSG msg;
while(GetMessage(&msg,NULL,0,0))//从消息队列中取消息
{
TranslateMessage(&msg);//翻译消息
DispatchMessage(&msg);//将消息路由给操作系统
}
return 0;
}
(3)回调函数的建立
1>回调函数的形式:
LRESULT CALLBACK WindowProc(
HWND hwnd, // handle of window
UINT uMsg, // message identifier
WPARAM wParam, // first message parameter
LPARAM lParam // second message parameter
);
回调函数一定要写成上述形式,函数名可以改变,参数同消息结构体中的参数
2>实例
LRESULT CALLBACK WinSunProc( //CALLBACK(回调函数)为_stdcall的宏定义,_stdcall为标准调用约定,_cdecl为C语言调用约定
HWND hwnd, // handle to window
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);//弹出消息框,参数分别为消息有关的窗口句柄,消息显示的文本,消息的标题,消息框的类型。
break;
case WM_LBUTTONDOWN://鼠标左键按下
MessageBox(hwnd,"mouse clicked","weixin",0);
//输出文字
HDC hdc;//用于帮助作图
hdc=GetDC(hwnd);//获取DC的句柄,参数为窗口句柄
TextOut(hdc,0,50,"计算机编程语言培训",strlen("计算机编程语言培训"));//在窗口上输出文本,参数分别为DC句柄,输出文本的横、纵坐标,输出文本的内容,输出文本的字符数
ReleaseDC(hwnd,hdc);//释放DC
break;
case WM_PAINT://窗口重绘的消息
HDC hDC;
PAINTSTRUCT ps;
hDC=BeginPaint(hwnd,&ps);//获取DC
TextOut(hDC,0,0,"维新培训",strlen("维新培训"));
EndPaint(hwnd,&ps);//释放DC
break;
//BeginPaint和EndPaint只能用于WM_PAINT消息响应中
case WM_CLOSE://关闭窗口消息
if(IDYES==MessageBox(hwnd,"是否真的结束?","weixin",MB_YESNO))
//IDYES==MessageBox(hwnd,"是否真的结束?",将常量写在前面,利于防止出错
{
DestroyWindow(hwnd);//销毁窗口,并发送WM_DESTROY消息
}
break;
case WM_DESTROY:
PostQuitMessage(0);//发送WM_QUIT消息到消息队列中,此时GetMessage获得0,WinMain函数退出
break;
default:
return DefWindowProc(hwnd,uMsg,wParam,lParam);//返回缺省的窗口过程,必不可少
}
return 0;
}
- 利用API函数编写程序
- apiexample.c例子教我们如何利用FFMPEG库中的API函数来编写自己的编解码程序
- delphi利用Window API编写基于socket的tcp程序
- 在C#中利用API编写关机程序
- 利用OpenSSL编写SSL通信程序时常使用的API
- 利用NASM编写引导程序
- 利用JSP编写程序初步
- 利用VS2013编写C++程序
- 利用逻辑合理性编写程序
- 利用操作系统提供的API编写防火墙
- 利用DEBUG API编写Loader Path
- 利用通讯api编写短信软件
- 利用 Django REST framework 编写 RESTful API
- 在CB6下基于api函数编写串口通信程序简介
- 在CB6下基于api函数编写串口通信程序简介
- 利用waveXXX系列函数编写播放声音程序,采用双缓冲技术
- 基于VC++2010利用API函数MoveFileEx实现程序的隐藏、自启动与自删除
- 利用API函数MoveFileEx实现程序的隐藏、自启动与自删除
- 完美世界刘航:异构计算要避免昙花一现
- 倪光南院士:APU体现了芯片技术的创新
- 招标公告发布暂行办法
- java经典问题_水仙花数
- 异构芯片顺应计算机整合发展路径
- 利用API函数编写程序
- 不会再爱了
- 华为董事长孙亚芳:任正非的文章是公司成长的缩影
- spring依赖注入和控制反转
- 坎坷的组建RAID之路
- 曹淑敏:中国电信界的巾帼英雄
- google笔试题
- 女子邀数人殴打一对夫妻 数百人围观不敢制止
- Hibernate_组件关联