您的位置:首页 > 其它

win32 API基础

2013-08-23 08:59 197 查看
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);<
bc2d
/p>
                   }
         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还是根据自己建的工程而定。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: