Windows编程基础(API调用)
来源:互联网 发布:淘宝qs认证流程 编辑:程序博客网 时间:2024/04/29 15:33
本人已经博客移至:围观IT,更多精彩内容请访问:围观IT
说明:
MSG消息是一个结构体,参数:
HWND:标示和哪个窗口相关(表示窗口)
Unit(整形) message传递的消息,即用户在使用程序时所进行的相应操作:用相应的宏表示相应的操作。
WPARAM(整形):关于消息的附加信息。当我们按键盘时的时候,其实传递给系统的是一个WM_CHAR消息。而不知道是哪个键,而这个附加参数就表示具体是哪个按键。
LPARAM(整形):关于消息的附加信息。。
DWORD time:表示消息传递的时间
POINT:表示一个点。当消息被投递的时候,光标所在的位置。
WinMain是Window编程的入口函数。
参数:
HINSTANCE hInstance:此程序的句柄
HINSTANCE hPrevInstance::表示在此兄弟程序的标识句柄。即在此程序运行之前运行的此程序标识
LPSTR lpCmdLine:命令行参数。表示所要打开的文件地址。
INT nCmdShow:显示状态。比如最大化还是最小化。
消息响应:是程序对应用系统的操作
消息处理函数:对消息进行处理(程序员写,系统自动调用)
窗口的创建:
1.设计窗口类
使用一个结构体表示窗口WNDCLASS
窗口参数:
UNIT Styles:cs_...:表示窗口的类型
窗口类的类型都是一四位个十六进制位,对应一个二进制位为1,当他们或的时候,就使styles具有了一些类型
WNDPROC lpfnWndProc:指向一个窗口过程函数:指定了一类窗口过程,也称为回调函数。:当应用程序收到一个窗口消息时(消息中含有消息所相关的窗口,也就是说,消息要去哪个窗口,消息中已有说明),然后调用某一函数来处理这条消息。对应每个窗口,操作系统自动调用其相应的回调函数。而这个回调函数需要在这里定义。即在这里定义当此窗口得到消息时,所要执行的函数。(讲一个函数的指针赋值给它)
int cbClsExtra:类的附加内存。共享。通常设为0
int cbWndExtra:为窗口附加内存。通常为0.
HINSTANCE hInstance:应用程序的实例号
HICON hIcon:LoadIcon()设置图标。
HCURSOR hcursor=LoadCursor()设置光标
HBRUSH hbrBackground :(HBRUSH)GetStockObject();设置画刷。
LPCTSTR lpszMenuName:指向一个常量的字符串。设定菜单的名字。无菜单为NULL
LPCTSTR lpszClassName:给窗口设定的名字。
2.注册窗口类
RegisterClass ()
3.创建窗口
CreatWindow(
IPCTSTR lpClassName,//窗口的名称,即一个已注册的窗口的名称,更具窗口定义信息进行窗口注册
IPCTSTR lpWindowName,//窗口标题,即在窗口上方显示的标题
DWORD dsStyle,//窗口类型:各种类型,如是否支持窗口最大最小化,是否可调整边框大小
int x,//窗口位置(左上方的点)
int y,//同上
int nWidth,//窗口宽度
int nHeight,//窗口高度
HWND hWndParent,//父窗口
HMENU hMenu,//菜单句柄
HINSTANCE hInstance,//当前程序的实例句柄
LPVOID lpParam,
)
返回一个窗口句柄HWND
4.显示窗口
ShowWindow(
HWND hWnd;//显示窗口句柄
int x;//显示状态
)
5.更新窗口。
updateWindow();
消息循环
MSG msg;
GetMessage(
LPMSG lpMsg,//
HWND hWnd,设置捕捉哪个窗口的消息,设置NULL表示对于所有窗口的消息都进行捕捉
UINT wMsgFilterMin,//设置消息最小值
UINT wMsgFilterMax,//消息最大值。(进行范围的过滤,设为0,表示捕捉所有的消息)
)从消息队列中得到消息
TranslateMessage()//将键盘的ASSIC码转换消息
DispatchMessage()//将消息给操作系统
HDC设备描述表
GetDC(
HWND hwnd//窗口(设定跟那个窗口相关)
)
Example:
#include <windows.h> //所有的windows程序都要包含的头文件
#include<stdio.h>
LRESULT CALLBACK WinProc( //声明窗口处理消息函数
HWND hwnd,
UINT uMsg,
WPARAM wParam,
LPARAM lParam
);
int APIENTRY WinMain( //程序入口
HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
// TODO: Place code here.
WNDCLASS wnd; //设计窗口
wnd.cbClsExtra=0;//
wnd.cbWndExtra=0;
wnd.hbrBackground=(HBRUSH)GetStockObject(BLACK_BRUSH);
wnd.hCursor=LoadCursor(NULL,IDC_CROSS);
wnd.hIcon=LoadIcon(NULL,IDI_ERROR);
wnd.hInstance=hInstance;
wnd.lpfnWndProc=WinProc;//也就是指向函数的指针。
wnd.lpszClassName="Win2009";
wnd.lpszMenuName=NULL;
wnd.style=CS_HREDRAW|CS_VREDRAW;
RegisterClass(&wnd); //注册窗口
HWND hwnd;
hwnd=CreateWindow("Win2009","Windowprogram",WS_OVERLAPPEDWINDOW,0,0,600,400,NULL,NULL,hInstance,NULL);
//创建窗口,返回窗口句柄,表示此窗口
ShowWindow(hwnd,SW_SHOWNORMAL); //显示窗口
UpdateWindow(hwnd); //更新窗口
MSG msg;
while(GetMessage(&msg,NULL,0,0)) //从消息队列中取出消息
{
TranslateMessage(&msg); //转换消息
DispatchMessage(&msg);
}
return 0;
}
LRESULT CALLBACK WinProc( //窗口处理消息函数
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 code is %d",wParam);
MessageBox(hwnd,szChar,"char",0);
break;
case WM_LBUTTONDOWN:
MessageBox(hwnd,"mouse clicked","message",0);
HDC hdc;//设备描述符表
hdc=GetDC(hwnd);
TextOut(hdc,0,50,"程序员之家",strlen("程序员之家"));
//ReleaseDC(hwnd,hdc);
break;
case WM_PAINT://更新窗口时,产生重画消息。
HDC hDC;
PAINTSTRUCT ps;
hDC=BeginPaint(hwnd,&ps);
TextOut(hDC,50,0,"Windows 编程",strlen("Windows编程"));
EndPaint(hwnd,&ps);
break;
case WM_CLOSE:
if(IDYES==MessageBox(hwnd,"是否真的结束?","message",MB_YESNO))
{
DestroyWindow(hwnd);//关闭窗口。产生一个WM_DESTORY的消息
}
break;
case WM_DESTROY:
PostQuitMessage(0);//getMessage()返回FALSE,程序结束
break;
default:
return DefWindowProc(hwnd,uMsg,wParam,lParam);
}
return 0;
}
本人已经博客移至:围观IT,更多精彩内容请访问:围观IT
- Windows编程基础(API调用)
- VB.NET编程中调用Windows API
- VB.NET编程中调用Windows API
- 如何调用API实现WINDOWS编程
- Windows编程模型与API调用示例
- Python编程.利用ctypes调用Windows API
- 《Windows核心编程》---HOOK API基础
- 《Windows核心编程》---HOOK API基础
- 《Windows核心编程》---HOOK API基础
- C#调用Windows API详解(上)
- c# 调用windows API(user32.dll)
- C# 调用Windows API(1)
- C#调用Windows API(2)
- C# USB通信(调用Windows API)
- 调用Windows API
- C#调用windows API
- 调用windows api要点
- C#调用Windows API
- 回复以前一个同事的几个问题
- 怀念与我同龄的月季花
- SQLServer Tcp/IP链接配置
- Memcmp 与 Strcmp
- 优化问题的思考
- Windows编程基础(API调用)
- 服装ERP手记(四)--DRP项目中软件系统架构的比较(转自51cto之技术论坛)
- Android学习——界面编程!
- s3c2410触摸屏驱动
- 在对话框程序中检测回车
- 面试题精选(70):100人民币问题
- 什么是SQL SERVER实例
- 安装带有水晶报表的项目
- 一道很有意思的JAVA题目