win32 API基础

API/SDK  WINDOWS 应用开发

一、API/SDK应用工程的创建

所有工程在visual studio 2008 (vs)中文版下创建以及调试。

一、  工程的创建

创建win32项目,选择windows应用程序,附加选项选择空项目,进入vs的编辑区,选择你所创建的工程下的资源文件,右键选择添加新建项,添加cpp文件,名字自己起,在头文件处选择添加dialog,这样一个简单的对话框窗口就创建完了。

二、代码的处理

这里只添加确定和取消两个键的消息响应。

API/SDK所需的函数在头文件windows.h中,同时将你的窗口文件包含到你的代码中。

三、所需函数讲解

1.主函数 int WINAPI WinMain(      

    HINSTANCE hInstance,

    HINSTANCE hPrevInstance,

    LPSTR lpCmdLine,

    int nCmdShow

);

含有四个参数,前两个为句柄,第一个句柄为窗口第一次运行时的句柄,第四个参数为窗口显示的大小。

2.窗口调用函数

INT_PTR DialogBox(      

    HINSTANCE hInstance,

    LPCTSTR lpTemplate,

    HWND hWndParent,

    DLGPROC lpDialogFunc

);

第一个参数,调用窗口的句柄,调用哪个窗口就传递哪个窗口的句柄,

第二个参数,为窗口的ID,但是不能直接传递窗口的ID,因为他的类型为LPCTSTR,所以再讲一个函数

LPTSTR MAKEINTRESOURCE(



    WORD wInteger

);

用它来将窗口的ID转化成LPCTSTR类型的参数,

第三个参数,一般传递为NULL,

第四个参数,也是最重要的一个参数,是传递窗口消息的参数,同时他本身也是一个函数,

INT_PTR CALLBACK DialogProc(      

    HWND hwndDlg,

    UINT uMsg,

    WPARAM wParam,

    LPARAM lParam

);

这是函数的原型,这个函数的名字可以改变,但是必须和他原型是一样的,这个函数的参数讲解

第一个,处理的窗口句柄,

第二个,传进来的消息

第三个,对于按下按键的窗口ID进行判断

3.结束窗口

BOOL EndDialog(      

    HWND hDlg,

    INT_PTR nResult

);

第一个参数,要结束窗口的句柄

第二个参数,结束窗口时的按键

四.附代码

1.

#include <windows.h>

#include "resource.h"

#include "stdlib.h"

#include <tchar.h>

 

INT_PTR CALLBACK DialogProc(HWND hwndDlg,UINT uMsg,WPARAM wParam,LPARAM lParam)

{

     switch(uMsg)

     {

     case WM_COMMAND:

         switch(wParam)

         {

              case IDCANCEL:

              {

                   int iRet = MessageBox(hwndDlg,_T("退出!"),_T("提示"),MB_OKCANCEL);

                   if(iRet == IDOK)

                   {

                       EndDialog(hwndDlg,IDCANCEL);

                   }

              }

              break;

              case IDOK:

                   {

                       MessageBox(hwndDlg,_T("确定被按下"),_T("提示"),MB_OK);

                   }

         default:break;

         }

     default:break;

     }

     return 0;

}

int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)

{

     DialogBox(hInstance,MAKEINTRESOURCE(IDD_DIALOG1),NULL,DialogProc);

}

代码中的控件ID根据自己的定的而修改。

二、对于Edit Control的使用

前面讲了怎么创建一个工程,和对于消息的响应,对于别的控件的使用。

1.  Edit Control文本的获取

如何从Edit Control中获取文本?

讲一个函数

UINT GetDlgItemText(      

    HWND hDlg,

    int nIDDlgItem,

    LPTSTR lpString,

    int nMaxCount

);

上述函数的参数讲解:

第一个参数,所要获取文本的句柄;

第二个参数,所要获取文本的控件ID;

第三个参数,用于存储获取文本的字符(串);

第四个参数,获取文本的大小;

在这里补充一下,另一个函数

int MessageBox(      

    HWND hWnd,

    LPCTSTR lpText,

    LPCTSTR lpCaption,

    UINT uType

);

第一个参数,句柄;

第二个参数,提示的文本;

第三个参数,提示对话框标题;

第四个参数,提示出的对话框有几个按键。

我做了一个登陆的对话框

代码

#include <windows.h>

#include "resource.h"

#include "stdlib.h"

#include <tchar.h>

#include <string.h>

 

INT_PTR CALLBACK DialogProc(HWND hwndDlg,UINT uMsg,WPARAM wParam,LPARAM lParam)

{

     switch(uMsg)

     {

     case WM_COMMAND:

         switch(wParam)

         {

              case IDCANCEL:

              {

                   int iRet = MessageBox(hwndDlg,_T("退出!"),_T("提示"),MB_OKCANCEL);

                   if(iRet == IDOK)

                   {

                       EndDialog(hwndDlg,IDCANCEL);

                   }

              }

              break;

              case IDOK:

                   {

                       //TCHAR MI[6]="admin";

                       TCHAR szTextt[10],szText1[10];

                       GetDlgItemText(hwndDlg,IDC_MING,szText1,10);

                       GetDlgItemText(hwndDlg,IDC_MA,szTextt,10);

                       if(_tcscmp(szTextt,_T("123456"))==0&&_tcscmp(szText1,_T("admin"))==0)

                       {

                            MessageBox(hwndDlg,_T("登陆成功!"),_T("提示"),MB_OK);

                       }

                       else

                       {

                            MessageBox(hwndDlg,_T("密码错误!"),_T("提示"),MB_OK);

                       }

                   }

         default:break;

         }

     default:break;

     }

     return 0;

}

int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)

{

     DialogBox(hInstance,MAKEINTRESOURCE(IDD_DIALOG1),NULL,DialogProc);

}

密码显示星号的操作是将密码那框的属性中password改为true;

2.  将文本显示到Edit Control上

在这里讲一个函数

BOOL SetDlgItemText(      

    HWND hDlg,

    int nIDDlgItem,

    LPCTSTR lpString

);

第一个参数,句柄;

第二个参数,要显示文本控件的ID;

第三个参数,要显示的文本;

这里在上一个例子加一个显示密码的选项

代码

#include <windows.h>

#include "resource.h"

#include "stdlib.h"

#include <tchar.h>

#include <string.h>

 

INT_PTR CALLBACK DialogProc(HWND hwndDlg,UINT uMsg,WPARAM wParam,LPARAM lParam)

{

     switch(uMsg)

     {

     case WM_COMMAND:

         switch(wParam)

         {

              case IDCANCEL:

              {

                   int iRet = MessageBox(hwndDlg,_T("退出!"),_T("提示"),MB_OKCANCEL);

                   if(iRet == IDOK)

                   {

                       EndDialog(hwndDlg,IDCANCEL);

                   }

              }

              break;

              case IDOK:

                   {

                       //TCHAR MI[6]="admin";

                       TCHAR szTextt[10],szText1[10];

                       GetDlgItemText(hwndDlg,IDC_MING,szText1,10);

                       GetDlgItemText(hwndDlg,IDC_MA,szTextt,10);

                       if(_tcscmp(szTextt,_T("123456"))==0&&_tcscmp(szText1,_T("admin"))==0)

                       {

                            MessageBox(hwndDlg,_T("登陆成功!"),_T("提示"),MB_OK);

                       }

                       else

                       {

                            MessageBox(hwndDlg,_T("密码错误!"),_T("提示"),MB_OK);

                       }

                   }

              case IDC_XIANSHI:

                   {

                       SetDlgItemText(hwndDlg,IDC_XIANMA,_T("123456"));

                   }

         default:break;

         }

     default:break;

     }

     return 0;

}

int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)

{

     DialogBox(hInstance,MAKEINTRESOURCE(IDD_DIALOG1),NULL,DialogProc);

}

代码中ID还是根据自己建的工程而定。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值