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还是根据自己建的工程而定。