在文章开始之前,推荐一篇值得阅读的好文章!感兴趣的也可以去看一下,并关注作者!
题目:Go语言中的加解密利器:go-crypto库全解析
好事文章地址:https://cloud.tencent.com/developer/article/2470499
在软件开发中,数据安全和隐私保护越来越受到重视。Go 语言以其简洁高效的特性,成为了许多开发者的首选。然而,在实际项目中使用加解密时,还是需要在标准库的基础上做一些封装。go-crypto
库应运而生,它是一个专为 Golang 设计的加密解密工具库,提供了 AES 和 RSA 等多种加密算法的支持。
VC++6.0入门——第7讲 对话框编程(一)
Windows应用程序工作的基本流程是从用户那里得到数据,经过相应的处理之后,再把处理结果输出到屏幕、打印机或者其他的输出设备上。那么,应用程序是如何从用户那里得到数据,并且再将修改后的数据显示给用户的呢?这就需要用到Windows应用程序中一个很重要的用户接口一对话框。
新建的方式:
方式一:插入--->资源--->对话框
方式二:资源工具条中插入
有两种类型的对话框:模态(Modal)对话框和非模态(Modeless)对话框。
模态对话框
模态对话框是指当其显示时,程序会暂停执行,直到关闭这个模态对话框后,才能继续执行程序中其他任务。例如,在Wod中利用【文件打开】菜单命令显示一个“打开”对话框后,再用鼠标去选择其他菜单,或者进行该对话框以外的任何操作时,只会听到嘟嘟声,这是因为“打开”对话框是一个模态对话框。模态对话框垄断了用户的输入,当一个模态对话框打开时,用户只能与该对话框进行交互,而其他用户界面对象接收不到输入信息。我们平时所遇到的大部分对话框都是模态对话框。
非模态对话框
当非模态对话框显示时,允许转而执行程序中其他任务,而不用关闭这个对话框。典型的例子是Windows提供的记事本程序中的“查找”对话框,该对话框不会垄断用户的输入,打开“查找”对话框后,仍可以与其他用户界面对象进行交互,用户可以一边查找,一边修改文章,这样,就大大方便了使用。
右键,建立类向导
弹出模态对话框时,不能点击主窗口的其他按钮,只有关闭之后才能
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,然后添加的时候进行判断
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;
}
}
也可以这样,使用静态成员变量
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.默认样式里的通知是不勾选的,需要勾上,让他能接收通知
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);
}
另一种方式,相当于上面方式的组合
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);
int num1,num2,num3;
num1 = GetDlgItemInt(IDC_EDIT1);
num2 = GetDlgItemInt(IDC_EDIT2);
num3 = num1 + num2;
SetDlgItemInt(IDC_EDIT3,num3);
DoDataExchange建立控件和成员变量之间的关联
UpdateData();
m_num3 = m_num1 + m_num2;
UpdateData(FALSE);
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);
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,"收缩<<");
}
}
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);
}
}
显示之前发消息
LRESULT CALLBACK WindowProc( HWND hwnd, // handle to window
UINT uMsg, // message identifier
WPARAM wParam, // first message parameter
LPARAM lParam // second message parameter
)
// 窗口过程函数
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
}
其他获取下一个输入框句柄的方式
void CTestDlg::OnOK()
{
// TODO: Add extra validation here
// GetDlgItem(IDC_EDIT1)->GetNextWindow()->SetFocus();
GetFocus()->GetNextWindow()->SetFocus();
// CDialog::OnOK();
}
持续回车会出现非法访问
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讲 对话框编程(一)
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。