Windows编程基础(API调用)

来源:互联网 发布:淘宝qs认证流程 编辑:程序博客网 时间:2024/04/29 15:33

 本人已经博客移至:围观IT,更多精彩内容请访问:围观IT

说明

MSG消息是一个结构体,参数:

HWND:标示和哪个窗口相关(表示窗口)

Unit(整形) message传递的消息,即用户在使用程序时所进行的相应操作:用相应的宏表示相应的操作。

WPARAM(整形):关于消息的附加信息。当我们按键盘时的时候,其实传递给系统的是一个WM_CHAR消息。而不知道是哪个键,而这个附加参数就表示具体是哪个按键。

LPARAM(整形):关于消息的附加信息。。

DWORD time:表示消息传递的时间

POINT:表示一个点。当消息被投递的时候,光标所在的位置。

 

WinMainWindow编程的入口函数。

参数:

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

原创粉丝点击