VC++6.0入门——第7讲 对话框编程(一)

VC++6.0入门——第7讲 对话框编程(一)

在文章开始之前,推荐一篇值得阅读的好文章!感兴趣的也可以去看一下,并关注作者!

题目:Go语言中的加解密利器:go-crypto库全解析

好事文章地址:https://cloud.tencent.com/developer/article/2470499

在软件开发中,数据安全和隐私保护越来越受到重视。Go 语言以其简洁高效的特性,成为了许多开发者的首选。然而,在实际项目中使用加解密时,还是需要在标准库的基础上做一些封装。go-crypto 库应运而生,它是一个专为 Golang 设计的加密解密工具库,提供了 AES 和 RSA 等多种加密算法的支持。

引出VC++6.0入门——第7讲 对话框编程(一)

第7讲 对话框编程(一)Windows应用程序工作的基本流程是从用户那里得到数据,经过相应的处理之后,再把处理结果输出到屏幕、打印机或者其他的输出设备上。那么,应用程序是如何从用户那里得到数据,并且再将修改后的数据显示给用户的呢?这就需要用到Windows应用程序中一个很重要的用户接口一对话框。

新建的方式:

方式一:插入--->资源--->对话框

方式二:资源工具条中插入

有两种类型的对话框:模态(Modal)对话框和非模态(Modeless)对话框。

模态对话框

模态对话框是指当其显示时,程序会暂停执行,直到关闭这个模态对话框后,才能继续执行程序中其他任务。例如,在Wod中利用【文件打开】菜单命令显示一个“打开”对话框后,再用鼠标去选择其他菜单,或者进行该对话框以外的任何操作时,只会听到嘟嘟声,这是因为“打开”对话框是一个模态对话框。模态对话框垄断了用户的输入,当一个模态对话框打开时,用户只能与该对话框进行交互,而其他用户界面对象接收不到输入信息。我们平时所遇到的大部分对话框都是模态对话框。

非模态对话框

当非模态对话框显示时,允许转而执行程序中其他任务,而不用关闭这个对话框。典型的例子是Windows提供的记事本程序中的“查找”对话框,该对话框不会垄断用户的输入,打开“查找”对话框后,仍可以与其他用户界面对象进行交互,用户可以一边查找,一边修改文章,这样,就大大方便了使用。

右键,建立类向导

模态和非模态对话框弹出模态对话框时,不能点击主窗口的其他按钮,只有关闭之后才能

代码语言:java复制void CMybolView::OnDialog()

{

// TODO: Add your command handler code here

CTestDlg dlg;

dlg.DoModal();

CTestDlg dlg;

dlg.Create(IDD_DIALOG1,this);

dlg.ShowWindow(SW_SHOW);

CTestDlg *pDlg = new CTestDlg();

pDlg->Create(IDD_DIALOG1,this);

pDlg->ShowWindow(SW_SHOW);

}按钮创建按钮新建按钮,右键,属性

方法一:定义布尔变量设置一个BooL类型的变量,初始化值为False,然后添加的时候进行判断

代码语言:java复制void CTestDlg::OnButton1()

{

// TODO: Add your control notification handler code here

if(m_isHas==false){

m_btn.Create("weixin", BS_DEFPUSHBUTTON | WS_VISIBLE | WS_CHILD,

CRect(0,0,100,100),this,123);

m_isHas = true;

}else{

m_btn.DestroyWindow();

m_isHas = false;

}

}方法二:利用静态变量也可以这样,使用静态成员变量

方法三:使用句柄代码语言:java复制void CTestDlg::OnButton1()

{

// 使用句柄

if(!m_btn.m_hWnd){

m_btn.Create("weixin", BS_DEFPUSHBUTTON | WS_VISIBLE | WS_CHILD,

CRect(0,0,100,100),this,123);

}else{

m_btn.DestroyWindow();

}

}布局美化其实就是Layout菜单中的按钮

静态文本框响应事件1.要改名字,默认都是一样的,需要改成不一样的名字,才能添加单击事件的响应

2.默认样式里的通知是不勾选的,需要勾上,让他能接收通知

实现加法运算GetDlgItem(IDC_EDIT1)->GetWindowText(ch1,10);代码语言:java复制void CTestDlg::OnButton2()

{

// TODO: Add your control notification handler code here

int num1,num2,num3;

char ch1[10],ch2[10],ch3[10]; // 字符长度为10

GetDlgItem(IDC_EDIT1)->GetWindowText(ch1,10);

GetDlgItem(IDC_EDIT2)->GetWindowText(ch2,10);

// 字符转数字

num1 = atoi(ch1);

num2 = atoi(ch2);

num3 = num1 + num2;

// 数字转文本,参数为数字,字符串,进制,这里是10进制

itoa(num3,ch3,10);

GetDlgItem(IDC_EDIT3)->SetWindowText(ch3);

}组合方法GetDlgItemText另一种方式,相当于上面方式的组合

代码语言:java复制 int num1,num2,num3;

char ch1[10],ch2[10],ch3[10]; // 字符长度为10

GetDlgItemText(IDC_EDIT1,ch1,10);

GetDlgItemText(IDC_EDIT2,ch2,10);

// 字符转数字

num1 = atoi(ch1);

num2 = atoi(ch2);

num3 = num1 + num2;

itoa(num3,ch3,10);

SetDlgItemText(IDC_EDIT3,ch3);第三种方式,GetDlgItemInt代码语言:java复制int num1,num2,num3;

num1 = GetDlgItemInt(IDC_EDIT1);

num2 = GetDlgItemInt(IDC_EDIT2);

num3 = num1 + num2;

SetDlgItemInt(IDC_EDIT3,num3);添加成员变量,实现关联【推荐】DoDataExchange建立控件和成员变量之间的关联

代码语言:java复制 UpdateData();

m_num3 = m_num1 + m_num2;

UpdateData(FALSE);使用控件变量代码语言:java复制 int num1,num2,num3;

char ch1[10],ch2[10],ch3[10]; // 字符长度为10

m_edit1.GetWindowText(ch1,10);

m_edit2.GetWindowText(ch2,10);

num1 = atoi(ch1);

num2 = atoi(ch2);

num3 = num1 + num2;

itoa(num3,ch3,10);

m_edit3.SetWindowText(ch3);通过发送消息获得文本直接给对话框子控件发消息实现按钮收缩和扩展功能点击时,按钮字变化代码语言:java复制void CTestDlg::OnButton3()

{

// TODO: Add your control notification handler code here

CString str;

if(GetDlgItemText(IDC_BUTTON3,str),str=="收缩<<"){

SetDlgItemText(IDC_BUTTON3,"扩展");

}else{

SetDlgItemText(IDC_BUTTON3,"收缩<<");

}

}实现扩展和收缩代码语言:java复制void CTestDlg::OnButton3()

{

// TODO: Add your control notification handler code here

CString str;

if(GetDlgItemText(IDC_BUTTON3,str),str=="收缩<<"){

SetDlgItemText(IDC_BUTTON3,"扩展>>");

}else{

SetDlgItemText(IDC_BUTTON3,"收缩<<");

}

static CRect rectLarge; // 原始尺寸,静态

static CRect rectSmall; // 缩小后的尺寸

if(rectLarge.IsRectNull()){

CRect rectSeparator;

GetDlgItem(IDC_SEPATATOR)->GetWindowRect(rectSeparator);

GetWindowRect(&rectLarge); // 获取当前尺寸

rectSmall.left = rectLarge.left;

rectSmall.top = rectLarge.top;

rectSmall.right = rectLarge.right;

rectSmall.bottom = rectSeparator.bottom;

}

if(str == "收缩<<"){

SetWindowPos(NULL,0,0,rectSmall.Width(),rectSmall.Height(),

SWP_NOMOVE | SWP_NOZORDER);

}else{

SetWindowPos(NULL,0,0,rectLarge.Width(),rectLarge.Height(),

SWP_NOMOVE | SWP_NOZORDER);

}

}实现回车光标移动显示之前发消息

代码语言:java复制LRESULT CALLBACK WindowProc( HWND hwnd, // handle to window

UINT uMsg, // message identifier

WPARAM wParam, // first message parameter

LPARAM lParam // second message parameter

)代码语言:java复制// 窗口过程函数

WNDPROC prevProc;

LRESULT CALLBACK WinSunProc( HWND hwnd, // handle to window

UINT uMsg, // message identifier

WPARAM wParam, // first message parameter

LPARAM lParam // second message parameter

)

{

// 是不是字符消息,回车按键

if(uMsg==WM_CHAR && wParam==0x0d){

::SetFocus(::GetNextWindow(hwnd, GW_HWNDNEXT));

return 1;

}else{

return prevProc(hwnd,uMsg,wParam,lParam);

}

}

BOOL CTestDlg::OnInitDialog()

{

CDialog::OnInitDialog();

// TODO: Add extra initialization here

prevProc = (WNDPROC)SetWindowLong(GetDlgItem(IDC_EDIT1)->m_hWnd,GWL_WNDPROC,

(LONG)WinSunProc);

return TRUE; // return TRUE unless you set the focus to a control

// EXCEPTION: OCX Property Pages should return FALSE

}其他获取下一个输入框句柄的方式

利用缺省处理实现代码语言:java复制void CTestDlg::OnOK()

{

// TODO: Add extra validation here

// GetDlgItem(IDC_EDIT1)->GetNextWindow()->SetFocus();

GetFocus()->GetNextWindow()->SetFocus();

// CDialog::OnOK();

}持续回车会出现非法访问

代码语言:java复制void CTestDlg::OnOK()

{

// TODO: Add extra validation here

GetNextDlgTabItem(GetFocus())->SetFocus();

// CDialog::OnOK();

}Tab顺序,布局下的Tab顺序可以进行改变,以上函数会按照序号循环查找

现在,我们取消收缩按钮的默认设置,并删除OK按钮,再次运行Mybole程序,打开测试对话框,按下回车键,会发现焦点仍是在各控件间依次转移。也就是说,当用户按下回车键时,Windows将查看对话框中是否存在指定的默认按钮,如果有,就调用该默认按钮单击消息的响应函数。如果没有,就会调用虚拟的OnOK函数,即使对话框没有包含默认的OK按钮。但是读者一定要注意,这个默认OK按钮的D是:IDOK。

总结VC++6.0入门——第7讲 对话框编程(一)

相关推荐

哈勃空间望远镜
det365官网登录

哈勃空间望远镜

📅 08-09 👁️ 3323
全国最大的事故车批发在哪?买事故车去哪个平台
365bet客户端下载

全国最大的事故车批发在哪?买事故车去哪个平台

📅 08-20 👁️ 2990
dnf破碎森林在什么地方 dnf破碎森林在哪里
det365官网登录

dnf破碎森林在什么地方 dnf破碎森林在哪里

📅 09-08 👁️ 3954
銳(锐)
det365官网登录

銳(锐)

📅 10-29 👁️ 3061
描写水的成语
体育在线365

描写水的成语

📅 09-02 👁️ 9514
戴尔成都产值大增50%背后的故事
365bet客户端下载

戴尔成都产值大增50%背后的故事

📅 10-09 👁️ 2233