以前一直以为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对话框相关推荐

  1. 不使用资源文件动态创建对话框的做法

    作者:朱金灿 来源:http://blog.csdn.net/clever101 一般而言,在 Windows编程中创建对话框需要先定义一个对话框资源.我想能不能不用资源文件单纯通过代码创建对话框呢? ...

  2. Win32窗体应用程序如何添加资源文件?

    Win32窗体应用程序如何添加资源文件? 上一篇文章介绍了:如何创建一个最简单的Windows窗体应用程序. 按照上一篇文章的介绍,我们的HelloApp项目对应如下的窗体应用程序: 这一篇文章中,我 ...

  3. WIN32编程之.rc资源文件的使用

    引言: 首先,如果学习标C,黑窗口程序,真的没有必要非要用VC: 那么问题来了:学习WIN32是否需要用VC? 我的答案是:不是非要VC不可,其它IDE也可以用来学WIN32: 甚至我一度以为的学到时 ...

  4. qt中添加资源文件以及添加菜单图标、工具栏中菜单的快捷方式、窗口以及对话框的icon

    1.file--new-QT resource file,就会在工程中添加一个资源文件,然后单击Add下拉框,选择Add prefix,可以将生成的/new/prefix的后缀改为其他的名字,如fil ...

  5. 资源文件相关学习总结

    windows资源文件(.rc)是如何变成窗口控件的 在Visual C++使用资源来创建对话框,菜单,以及一些自定义控件,实际是为了减少基于Win32 SDK 编程开发人员在编写Applicatio ...

  6. vc 国际化的资源文件处理

    MS Windows操作系统是一个世界上广泛使用的操作系统,对于不同语种的国家MS Windows有相应语种的版本.在不同语种的Windows平台上应该运行相应语种的应用程序.也就是说程序的用户界面( ...

  7. Wxwidget 动态加载资源文件

    一.创建自己的资源文件 你可以从一个xml文件中加载对话框,frame窗口,菜单条,工具条等等.不用c++代码去实现,这符合代码界面和代码分离的原则.我们可以使用DialogBlocks,XRCed和 ...

  8. VC++创建.rc资源文件

    初学MFC,对资源文件总是很困惑.一上来就直接自动生成了那么多的东西,尤其是.rc和resource.h文件.这两天了解了一下这个方面,在这里分享一下,欢迎交流学习. 1.前两天看了一个关于MFC初始 ...

  9. 学习使用资源文件[11] - DLL 中的资源文件

    本例将把一张 bmp 图片, 以资源文件的方式嵌入 dll, 然后再调用. 第一步: 建一个 DLL 工程, 如图: 然后保存, 我这里使用的名称都是默认的. 第二步: 建一个资源原文件, 如图: 编 ...

最新文章

  1. Js_Span 滑动手型鼠标样式
  2. Linux系统.xsesion日志文件,linux系统日志
  3. 计算机信息技术应用的困惑,信息技术教育的困惑
  4. org.springframework.jdbc.core.JdbcTemplate 无法import原因分析
  5. parted如何将磁盘所有空间格式化_linux下大于2T的硬盘格式化问题
  6. SAP Spartacus table cell如何通过cxOutlet在运行时动态注入组件
  7. treegrid,可以展开的jqgrid树
  8. php 接口日志,PHP 开发 APP 接口--错误日志接口
  9. (转)Spring Boot(九):定时任务
  10. vc建立一个窗口的流程
  11. 【SQL】分析函数功能-排序
  12. [原创]RedisDesktopManager工具使用介绍
  13. 全球抵押销售点(POS)软件行业调研及趋势分析报告
  14. 关于联想键盘,如何去除fn 键 联想官方解决方法
  15. 动图怎么分解成静图?教你一键在线分解gif动图?
  16. 网上资源之WEB前端
  17. win10修改user文件夹名称
  18. 辛瓜地计算机体育英语,体育英语|射箭(Archery)
  19. 第15节-热区Hot Spots | 剑雨Axure RP9系列【基础】
  20. HTTP 响应行及响应状态码

热门文章

  1. php针对中文的字符串函数,php截取中文字符串函数实例_php技巧
  2. ML之回归预测:利用十类机器学习算法(线性回归、kNN、SVM、决策树、随机森林、极端随机树、SGD、提升树、LightGBM、XGBoost)对波士顿数据集回归预测(模型评估、推理并导到csv)
  3. ML之LoRBaggingRF:依次利用LoR、Bagging、RF算法对泰坦尼克号数据集 (Kaggle经典案例)获救人员进行二分类预测——优化baseline模型
  4. PyQt:成功解决PyQt4升级到PyQt5改变的函数或方法
  5. Crawler:关于爬虫的简介、安装、使用方法之详细攻略
  6. OpenCV官方文档 理解k - means聚类
  7. JAVA_OA管理系统(三)番外篇:Myeclipse导入Spring源码包
  8. (转载)C#:Enum、Int和String的互相转换,枚举转换
  9. Android插件化开发之解决OpenAtlas组件在宿主的注冊问题
  10. 关于VS2017 添加 EF的MVC控制器报错的解决方法