标签:服务 重复 不同 关闭 man 通过 解决方法 服务端 api函数
class CTestOneApp : public CWinApp
{
public:
CTestOneApp();
public:
// 重写
virtual BOOL InitInstance();
// 实现
DECLARE_MESSAGE_MAP()
};
BOOL CTestOneApp::InitInstance()
{
//初始化应用程序环境包控件等操作,省略部分代码.
CWinApp::InitInstance();
//省略部分代码...
//定义对话框对象
CTestOneDlg dlg;
//保存对话框到全局变量
m_pMainWnd = &dlg;
//显示对话框
INT_PTR nResponse = dlg.DoModal();
if (nResponse == IDOK)
{
//“确定”来关闭对话框的代码
}
else if (nResponse == IDCANCEL)
{
//“取消”来关闭对话框的代码
}
// 由于对话框已关闭,所以将返回 FALSE 以便退出应用程序, 而不是启动应用程序的消息泵。
return FALSE;
}
这个函数可以看作MFC程序的入口函数,main函数隐藏在这个函数中。
在实际的开发中,一般不需要对这个类进行操作,但如果需要在建立主对话框之前处理一些数据或者准备工作,就可以把代码添加到这个函数中,主对话框显示之前。
这里有两个比较典型的应用。
第一个需求不涉及数据传递,可以在代码中将用户名和密码固定,如果输入的结果与设定的结果一致,那么就开放此软件的使用权限;稍微复杂一点的,可以比较输入的结果与数据库中存储的用户名和密码是否匹配,如果匹配,才开放此软件的使用权限;再稍微复杂一点的,还可以将界面输入结果与服务器中的信息比较,查看当前用户是否有此软件的使用权限,当然这个还涉及到服务端的处理,与网络通信有关。
第二个需求涉及不同对话框之间的数据传递,应用也比较广泛。
// CTestOneDlg 对话框
class CTestOneDlg : public CDialogEx
{
public:
// 标准构造函数
CTestOneDlg(CWnd* pParent = NULL);
// 对话框数据
enum { IDD = IDD_TESTONE_DIALOG };
protected:
// 动态数据交换,负责控件与变量之间的关联
virtual void DoDataExchange(CDataExchange* pDX);
protected:
//应用程序句柄
HICON m_hIcon;
//重载初始化对话框
virtual BOOL OnInitDialog();
//定义消息WM_SYSCOMMAND处理函数
afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
//定义消息WM_PAINT处理函数
afx_msg void OnPaint();
//定义消息ON_WM_QUERYDRAGICON处理函数
afx_msg HCURSOR OnQueryDragIcon();
//消息映射
DECLARE_MESSAGE_MAP()
};
MFC消息响应机制过程比较复杂,这里只是基础部分,做一个简单的过程演示,在界面中添加一个按钮的消息响应。
首先把工作区间切换到资源视图,如果工作区间没有显示资源视图,在菜单中的视图中查找资源视图并点击。切换到资源视图后,找到Dialog文件夹找到IDD_TESTONE_DIALOG。
双击对话框ID就会显示这个对话框窗口,从工具栏中选择Button按钮后,可以直接将按钮拖至显示的这个对话框窗口中。工具栏只有当主工作区间显示对话框时才会显示。用鼠标右键点击按钮,选择属性切换到属性页,修改按钮的名称(对应Caption)“Test”,同时修改按钮的ID为IDC_BTN_TEST。
有两种方式可以完成添加按钮的消息处理函数。
直接双击按钮;
右键选中按钮,点击“添加事件处理程序”;
两种方式区别在于,第一种方式添加的消息响应函数名称是默认的,第二种方式添加的消息响应函数名称是可以编辑的。
代码如下所示:
//添加按钮IDC_BTN_TEST的单击消息处理函数
void CTestOneDlg::OnBtnTest()
{
AfxMessageBox(_T("测试成功!"));
}
添加一个MessageBox之后,编译并执行。
标签:服务 重复 不同 关闭 man 通过 解决方法 服务端 api函数
原文地址:https://www.cnblogs.com/KX-Lau/p/13064633.html