用对话框作为主窗口;IDD_FORMVIEW资源文件;

2024-03-06 06:50

本文主要是介绍用对话框作为主窗口;IDD_FORMVIEW资源文件;,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

转自:http://blog.csdn.net/tcjiaan/article/details/8567053

前面我们在编写Win32应用程序的思路都是:

1、设计窗口类。2、注册窗口类。3、创建窗口。……

然而,当我们接触控件以后, 会发现一个问题,我们在窗口上放置控件实在不好弄,而资源中的对话框具有图形编辑器,操作起来相对方便。

于是,就有了一个想法:把对话框用作主窗口,那我们在布局控件时就轻松了。

 

其实这想法在网上已有牛人做了,不过,人家是用Win32汇编干的,当然,要把它变为C++就更简单了。

首先,介绍第一个法子,直接以桌面作为父窗口来创建对话框。

1、创建一个对话框资源,界面就发挥你的设计天赋了。

2、创建一个图标资源,既作为应用程序的图标(VS编译时会选择第一个添加到资源中的图标作为EXE的图标),也作为对话框的图标。

3、在代码中创建并显示对话框。

[cpp]  view plain copy
print ?
  1. #include <Windows.h>  
  2. #include "resource.h"  
  3. // 开启可视化效果  
  4. #pragma comment(linker,"\"/manifestdependency:type='win32' \  
  5. name='Microsoft.Windows.Common-Controls' version='6.0.0.0' \  
  6. processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"")  
  7.   
  8. INT_PTR CALLBACK DlgProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam);  
  9.   
  10. HINSTANCE hgInst;  
  11. int WINAPI WinMain(HINSTANCE hThisApp, HINSTANCE hPrevApp, LPSTR lpCmd, int nShow)  
  12. {  
  13.     hgInst = hThisApp;  
  14.     HWND hdlg = CreateDialog(hThisApp, MAKEINTRESOURCE(IDD_MY),GetDesktopWindow(),(DLGPROC)DlgProc);  
  15.     if(!hdlg)  
  16.     {  
  17.         return 0;  
  18.     }  
  19.     ShowWindow(hdlg,SW_SHOW);  
  20.     MSG msg;  
  21.     while(GetMessage(&msg,NULL,0,0))  
  22.     {  
  23.         TranslateMessage(&msg);  
  24.         DispatchMessage(&msg);  
  25.     }  
  26.     return 0;  
  27. }  
  28.   
  29. INT_PTR CALLBACK DlgProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam)  
  30. {  
  31.     switch(msg)  
  32.     {  
  33.     case WM_INITDIALOG:  
  34.         // 设置对话框的图标  
  35.         SendMessage(hDlg, WM_SETICON, ICON_SMALL, (LPARAM)LoadIcon(hgInst, MAKEINTRESOURCE(IDI_APP)));  
  36.         return 0;  
  37.     case WM_SYSCOMMAND:  
  38.         if(wParam == SC_CLOSE)  
  39.         {  
  40.             PostQuitMessage(0);//退出  
  41.         }  
  42.         return 0;  
  43.     }  
  44.     return (INT_PTR)FALSE;  
  45. }  

 

这样,我们可以运行一下。

 

=================================================================

第二种方法,我们还是遵照设计窗口类、注册窗口类、创建窗口等步骤,只是把对话框作为窗口的子级,对话框采用Form View视图。

在插入资源的对话框中,点击Dialog左边的图标,展开列表,在列表中选择IDD_FORMVIEW,然后点“新建”。

 

然后你看到一个没有边框和标题栏的对话框。

接下来我们可以放些控件上去。

最后,在响应WM_CREATE消息时,创建并显示对话框,父级是我们的主窗口。

[cpp]  view plain copy
print ?
  1. case WM_CREATE:  
  2.     {  
  3.         // 创建对话框  
  4.         HWND hdlg = CreateDialog(hgAppInst, MAKEINTRESOURCE(IDD_MYFORM), hwnd, (DLGPROC)DlgProc);  
  5.         // 显示对话框  
  6.         ShowWindow(hdlg, SW_SHOWNA);  
  7.     }  
  8.     return 0;  


最后运行结果如下:

 

 

完整的代码清单:

[cpp]  view plain copy
print ?
  1. #include <Windows.h>  
  2. #include "resource.h"  
  3. #pragma comment(linker,"\"/manifestdependency:type='win32' \  
  4. name='Microsoft.Windows.Common-Controls' version='6.0.0.0' \  
  5. processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"")  
  6.   
  7. LRESULT CALLBACK WindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);  
  8. INT_PTR CALLBACK DlgProc(HWND hdlg, UINT msg, WPARAM wParam, LPARAM lParam);  
  9.   
  10. HINSTANCE hgAppInst;  
  11. int WINAPI WinMain(HINSTANCE hThisApp, HINSTANCE hPrevApp, LPSTR lpCmd, int nShow)  
  12. {  
  13.     // 设计窗口类  
  14.     WNDCLASS wc = { };  
  15.     wc.hbrBackground = (HBRUSH)COLOR_WINDOW;  
  16.     wc.lpfnWndProc = (WNDPROC)WindowProc;  
  17.     wc.lpszClassName = L"supper_man";  
  18.     wc.hInstance = hThisApp;  
  19.     wc.style = CS_HREDRAW | CS_VREDRAW;  
  20.     RegisterClass(&wc);  
  21.     hgAppInst = hThisApp;  
  22.     // 创建窗口  
  23.     HWND hwnd = CreateWindow(L"supper_man", L"超级应用",   
  24.         WS_OVERLAPPEDWINDOW, 40, 25, 380, 300, NULL, NULL, hThisApp, NULL);  
  25.     if(!hwnd)  
  26.         return 0;  
  27.     ShowWindow(hwnd, nShow);  
  28.     UpdateWindow(hwnd);  
  29.     // 消息循环  
  30.     MSG msg;  
  31.     while(GetMessage(&msg,NULL,0,0))  
  32.     {  
  33.         TranslateMessage(&msg);  
  34.         DispatchMessage(&msg);  
  35.     }  
  36.     return 0;  
  37. }  
  38.   
  39. LRESULT CALLBACK WindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)  
  40. {  
  41.     switch (msg)  
  42.     {  
  43.     case WM_CREATE:  
  44.         {  
  45.             // 创建对话框  
  46.             HWND hdlg = CreateDialog(hgAppInst, MAKEINTRESOURCE(IDD_MYFORM), hwnd, (DLGPROC)DlgProc);  
  47.             // 显示对话框  
  48.             ShowWindow(hdlg, SW_SHOWNA);  
  49.         }  
  50.         return 0;  
  51.     case WM_DESTROY:  
  52.         PostQuitMessage(0);  
  53.         return 0;  
  54.     default:  
  55.         return DefWindowProc(hwnd,msg,wParam,lParam);  
  56.     }  
  57.     return 0;  
  58. }  
  59.   
  60. // 处理对话框消息  
  61. INT_PTR CALLBACK DlgProc(HWND hdlg, UINT msg, WPARAM wParam, LPARAM lParam)  
  62. {  
  63.     /* .............. */  
  64.     return (INT_PTR)FALSE;  
  65. }  

这篇关于用对话框作为主窗口;IDD_FORMVIEW资源文件;的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/779186

相关文章

python使用watchdog实现文件资源监控

《python使用watchdog实现文件资源监控》watchdog支持跨平台文件资源监控,可以检测指定文件夹下文件及文件夹变动,下面我们来看看Python如何使用watchdog实现文件资源监控吧... python文件监控库watchdogs简介随着Python在各种应用领域中的广泛使用,其生态环境也

bat脚本启动git bash窗口,并执行命令方式

《bat脚本启动gitbash窗口,并执行命令方式》本文介绍了如何在Windows服务器上使用cmd启动jar包时出现乱码的问题,并提供了解决方法——使用GitBash窗口启动并设置编码,通过编写s... 目录一、简介二、使用说明2.1 start.BAT脚本2.2 参数说明2.3 效果总结一、简介某些情

基于Redis有序集合实现滑动窗口限流的步骤

《基于Redis有序集合实现滑动窗口限流的步骤》滑动窗口算法是一种基于时间窗口的限流算法,通过动态地滑动窗口,可以动态调整限流的速率,Redis有序集合可以用来实现滑动窗口限流,本文介绍基于Redis... 滑动窗口算法是一种基于时间窗口的限流算法,它将时间划分为若干个固定大小的窗口,每个窗口内记录了该时间

使用JS/Jquery获得父窗口的几个方法(笔记)

<pre name="code" class="javascript">取父窗口的元素方法:$(selector, window.parent.document);那么你取父窗口的父窗口的元素就可以用:$(selector, window.parent.parent.document);如题: $(selector, window.top.document);//获得顶级窗口里面的元素 $(

49个权威的网上学习资源网站

艺术与音乐 Dave Conservatoire — 一个完全免费的音乐学习网站,口号是“让每一个人都可以接受世界级的音乐教育”,有视频,有练习。 Drawspace — 如果你想学习绘画,或者提高自己的绘画技能,就来Drawspace吧。 Justin Guitar — 超过800节免费的吉他课程,有自己的app,还有电子书、DVD等实用内容。 数学,数据科学与工程 Codecad

专题二_滑动窗口_算法专题详细总结

目录 滑动窗口,引入: 滑动窗口,本质:就是同向双指针; 1.⻓度最⼩的⼦数组(medium) 1.解析:给我们一个数组nums,要我们找出最小子数组的和==target,首先想到的就是暴力解法 1)暴力: 2)优化,滑动窗口: 1.进窗口 2.出窗口 3.更新值 2.⽆重复字符的最⻓⼦串(medium) 1)仍然是暴力解法: 2)优化: 进窗口:hash[s[rig

vue2实践:第一个非正规的自定义组件-动态表单对话框

前言 vue一个很重要的概念就是组件,作为一个没有经历过前几代前端开发的我来说,不太能理解它所带来的“进步”,但是,将它与后端c++、java类比,我感觉,组件就像是这些语言中的类和对象的概念,通过封装好的组件(类),可以通过挂载的方式,非常方便的调用其提供的功能,而不必重新写一遍实现逻辑。 我们常用的element UI就是由饿了么所提供的组件库,但是在项目开发中,我们可能还需要额外地定义一

汇编:嵌入式软件架构学习资源

成为嵌入式软件架构设计师需要掌握多方面的知识,包括嵌入式系统、实时操作系统、硬件接口、软件设计模式等。 以下是一些推荐的博客和网站,可以帮助你深入学习嵌入式软件架构设计: ### 1. **Embedded.com**    - **网址**: [Embedded.com](https://www.embedded.com/)    - **简介**: 这是一个专注于嵌入式系统设计的专业网

hot100刷题第1-9题,三个专题哈希,双指针,滑动窗口

求满足条件的子数组,一般是前缀和、滑动窗口,经常结合哈希表; 区间操作元素,一般是前缀和、差分数组 数组有序,更大概率会用到二分搜索 目前已经掌握一些基本套路,重零刷起leetcode hot 100, 套路题按套路来,非套路题适当参考gpt解法。 一、梦开始的地方, 两数之和 class Solution:#注意要返回的是数组下标def twoSum(self, nums: Lis

主窗口的设计与开发(二)

主窗口的设计与开发(二) 前言         在上一集当中,我们完成了主窗口的初始化,主窗口包括了左中右三个区域。我们还完成了对左窗口的初始化,左窗口包括了用户头像、会话标签页按钮、好友标签页按钮以及好友申请标签页按钮。对于切换每个标签页,我们还做了初始化信号槽的内容。最后我们将整个MainWidget类设置为单例模式。         那么这一集我们将继续完成主窗口的设计与开发,这一集我