利用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;

}

 

原创粉丝点击