使用资源文件绘制Win32对话框
以前一直以为Win32不能拖控件,现在才知道原来是可以的。
本文演示使用VC6创建一个基于对话框的Win32程序,界面使用资源文件绘制。
创建一个Win32应用程序
创建对话框资源文件
点击 File -> New -> Resource Script
创建了资源文件后,还要手动将 resource.h 添加到项目中
创建对话框
选择资源文件,右键如图位置
选择 Dialog 然后点 New
然后就可以拖控件了,本例实现一个登录界面,效果如下图
双击可以设置控件的ID和显示内容
修改编辑框和按钮的ID,修改后的结果可以在 resource.h 看到,VC6自动生成了ID的宏。
显示对话框
要使用资源文件里定义的东西,要包含头文件
#include "resource.h"
显示对话框的函数是 DialogBox
INT_PTR DialogBox( HINSTANCE hInstance, // handle to moduleLPCTSTR lpTemplate, // dialog box templateHWND hWndParent, // handle to owner windowDLGPROC lpDialogFunc // dialog box procedure);
主函数这样写
int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
{// TODO: Place code here.DialogBox(hInstance, MAKEINTRESOURCE(IDD_DIALOG_MAIN), NULL, DialogProc);return 0;
}
非常简单,比自己定义窗口类,再去注册,要简单得多。
实现对话框的窗口函数,和窗口一样,对话框的窗口过程有固定的格式:
INT_PTR CALLBACK DialogProc( HWND hwndDlg, // handle to dialog boxUINT uMsg, // message WPARAM wParam, // first message parameterLPARAM lParam // second message parameter);
// 对话框窗口过程
BOOL CALLBACK DialogProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{switch(uMsg){case WM_INITDIALOG:MessageBox(NULL, TEXT("WM INITDIALOG"), TEXT("INIT"), MB_OK);return TRUE;case WM_COMMAND:switch(LOWORD(wParam)){case IDC_BUTTON_OK:MessageBox(NULL, TEXT("OK"), TEXT("OK"), MB_OK);return TRUE;case IDC_BUTTON_CANCEL:MessageBox(NULL, TEXT("CANCEL"), TEXT("CANCEL"), MB_OK);EndDialog(hDlg, 0);return TRUE;}return TRUE;}return FALSE;
}
运行程序,效果图如下
获取文本框内容
现在希望点击OK按钮,能够获取文本框的内容。
要获取文本框内容,要先获取文本框句柄,获取对话框内的控件的句柄,调用的函数是:
HWND GetDlgItem(HWND hDlg, // handle to dialog boxint nIDDlgItem // control identifier
);
拿到句柄后,调用 GetWindowText 获取文本框的字符串。
int GetWindowText( HWND hWnd, // handle to window or controlLPTSTR lpString, // text bufferint nMaxCount // maximum number of characters to copy);
修改窗口过程如下,增加了判断用户名和密码的逻辑
// 对话框窗口过程
BOOL CALLBACK DialogProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{HWND hEditUsername;HWND hEditPassword;TCHAR lpszUserName[128];TCHAR lpszPassword[128];switch(uMsg){case WM_INITDIALOG:MessageBox(NULL, TEXT("WM INITDIALOG"), TEXT("INIT"), MB_OK);return TRUE;case WM_COMMAND:switch(LOWORD(wParam)){case IDC_BUTTON_OK://MessageBox(NULL, TEXT("OK"), TEXT("OK"), MB_OK);hEditUsername = GetDlgItem(hDlg, IDC_EDIT_USERNAME);hEditPassword = GetDlgItem(hDlg, IDC_EDIT_PASSWORD);GetWindowText(hEditUsername, lpszUserName, 128);GetWindowText(hEditPassword, lpszPassword, 128);if (strcmp(lpszUserName, TEXT("admin")) == 0 && strcmp(lpszPassword, TEXT("123")) == 0){MessageBox(NULL, TEXT("密码正确"), TEXT("密码正确"), MB_OK);}else{MessageBox(NULL, TEXT("密码错误"), TEXT("密码错误"), MB_OK);}return TRUE; case IDC_BUTTON_CANCEL:MessageBox(NULL, TEXT("CANCEL"), TEXT("CANCEL"), MB_OK);EndDialog(hDlg, 0);return TRUE;}return TRUE;}return FALSE;
}
使用资源文件绘制Win32对话框相关推荐
- 不使用资源文件动态创建对话框的做法
作者:朱金灿 来源:http://blog.csdn.net/clever101 一般而言,在 Windows编程中创建对话框需要先定义一个对话框资源.我想能不能不用资源文件单纯通过代码创建对话框呢? ...
- Win32窗体应用程序如何添加资源文件?
Win32窗体应用程序如何添加资源文件? 上一篇文章介绍了:如何创建一个最简单的Windows窗体应用程序. 按照上一篇文章的介绍,我们的HelloApp项目对应如下的窗体应用程序: 这一篇文章中,我 ...
- WIN32编程之.rc资源文件的使用
引言: 首先,如果学习标C,黑窗口程序,真的没有必要非要用VC: 那么问题来了:学习WIN32是否需要用VC? 我的答案是:不是非要VC不可,其它IDE也可以用来学WIN32: 甚至我一度以为的学到时 ...
- qt中添加资源文件以及添加菜单图标、工具栏中菜单的快捷方式、窗口以及对话框的icon
1.file--new-QT resource file,就会在工程中添加一个资源文件,然后单击Add下拉框,选择Add prefix,可以将生成的/new/prefix的后缀改为其他的名字,如fil ...
- 资源文件相关学习总结
windows资源文件(.rc)是如何变成窗口控件的 在Visual C++使用资源来创建对话框,菜单,以及一些自定义控件,实际是为了减少基于Win32 SDK 编程开发人员在编写Applicatio ...
- vc 国际化的资源文件处理
MS Windows操作系统是一个世界上广泛使用的操作系统,对于不同语种的国家MS Windows有相应语种的版本.在不同语种的Windows平台上应该运行相应语种的应用程序.也就是说程序的用户界面( ...
- Wxwidget 动态加载资源文件
一.创建自己的资源文件 你可以从一个xml文件中加载对话框,frame窗口,菜单条,工具条等等.不用c++代码去实现,这符合代码界面和代码分离的原则.我们可以使用DialogBlocks,XRCed和 ...
- VC++创建.rc资源文件
初学MFC,对资源文件总是很困惑.一上来就直接自动生成了那么多的东西,尤其是.rc和resource.h文件.这两天了解了一下这个方面,在这里分享一下,欢迎交流学习. 1.前两天看了一个关于MFC初始 ...
- 学习使用资源文件[11] - DLL 中的资源文件
本例将把一张 bmp 图片, 以资源文件的方式嵌入 dll, 然后再调用. 第一步: 建一个 DLL 工程, 如图: 然后保存, 我这里使用的名称都是默认的. 第二步: 建一个资源原文件, 如图: 编 ...
最新文章
- Js_Span 滑动手型鼠标样式
- Linux系统.xsesion日志文件,linux系统日志
- 计算机信息技术应用的困惑,信息技术教育的困惑
- org.springframework.jdbc.core.JdbcTemplate 无法import原因分析
- parted如何将磁盘所有空间格式化_linux下大于2T的硬盘格式化问题
- SAP Spartacus table cell如何通过cxOutlet在运行时动态注入组件
- treegrid,可以展开的jqgrid树
- php 接口日志,PHP 开发 APP 接口--错误日志接口
- (转)Spring Boot(九):定时任务
- vc建立一个窗口的流程
- 【SQL】分析函数功能-排序
- [原创]RedisDesktopManager工具使用介绍
- 全球抵押销售点(POS)软件行业调研及趋势分析报告
- 关于联想键盘,如何去除fn 键 联想官方解决方法
- 动图怎么分解成静图?教你一键在线分解gif动图?
- 网上资源之WEB前端
- win10修改user文件夹名称
- 辛瓜地计算机体育英语,体育英语|射箭(Archery)
- 第15节-热区Hot Spots | 剑雨Axure RP9系列【基础】
- HTTP 响应行及响应状态码
热门文章
- php针对中文的字符串函数,php截取中文字符串函数实例_php技巧
- ML之回归预测:利用十类机器学习算法(线性回归、kNN、SVM、决策树、随机森林、极端随机树、SGD、提升树、LightGBM、XGBoost)对波士顿数据集回归预测(模型评估、推理并导到csv)
- ML之LoRBaggingRF:依次利用LoR、Bagging、RF算法对泰坦尼克号数据集 (Kaggle经典案例)获救人员进行二分类预测——优化baseline模型
- PyQt:成功解决PyQt4升级到PyQt5改变的函数或方法
- Crawler:关于爬虫的简介、安装、使用方法之详细攻略
- OpenCV官方文档 理解k - means聚类
- JAVA_OA管理系统(三)番外篇:Myeclipse导入Spring源码包
- (转载)C#:Enum、Int和String的互相转换,枚举转换
- Android插件化开发之解决OpenAtlas组件在宿主的注冊问题
- 关于VS2017 添加 EF的MVC控制器报错的解决方法