天天看点

Windows编程基础(API调用)

 本人已经博客移至:围观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

继续阅读