VC6 WIN32,Dialog为主窗口编程

VC6是Microsoft非常经典的开发环境,尤其是Windows API方式开发,自从Quick C for win以来基本保持着同样的风格和API,在它上面做习练很不错。下面是习练完成的界面,它是在自动创建的WIN32 application模板下,增加一个Dialog,然后将Dialog嵌入到默认页面中的,这样Dialog即为应用窗体,而Dialog则可以借助于Dialog Editor摆放控件,接近于RAD方式开发。

步骤一:创造WIN32应用程序。

创建后大致浏览一下WIN32开发套路,建应用程序结构、注册窗口、显示并update窗口,然后进入消息主循环。这种结构是基础,在Dev C、PowerBASIC, FreeBASIC的Win32开发也是一样的,与开发语言没关系,是WIN32SDK 开发结构上的要求。

步骤二:SDI界面创建后,马上创建自己的Dialog

BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{HWND hWnd;hInst = hInstance; // Store instance handle in our global variablehWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);if (!hWnd){return FALSE;}hWndGlobal = hWnd;SetWindowText(hWnd, "Dialog as Application - VC6");nCmdShow = SW_SHOW;ShowWindow(hWnd, nCmdShow);UpdateWindow(hWnd);// Create DIALOG boxHWND hDlg = CreateDialog(hInst, MAKEINTRESOURCE(IDD_MAINFORM), hWnd, (DLGPROC)Mainform);// Show DIALOG boxShowWindow(hDlg, SW_SHOWNA);UpdateWindow(hWnd);RECT rectDlgw, rectDlgc, rectMainw, rectMainc;GetWindowRect(hWnd, &rectMainw);					//Dialog window areaGetClientRect(hWnd, &rectMainc);					//Dialog client areaGetWindowRect(hDlg, &rectDlgw);						//Dialog window areaGetClientRect(hDlg, &rectDlgc);						//Dialog client areaRECT rect;HWND hwndDT=GetDesktopWindow();		GetClientRect(hwndDT,&rect);		LONG dtWidth=rect.right-rect.left;	LONG dtHeight=rect.bottom-rect.top;	RECT rectbar;HWND taskbar = FindWindow("Shell_TrayWnd", "");GetWindowRect(taskbar, &rectbar);//if(rectbar.top>0)			//TASKBAR at bottom//if(rectbar.left>0)		//TASKBAR at left//Center MAINWINDOW at desktop client areaMoveWindow(hWnd, (rectbar.right-rectbar.left)+(dtWidth-(rectMainw.right-rectMainw.left))/2, (dtHeight-(rectMainw.bottom-rectMainw.top))/2, (rectDlgw.right-rectDlgw.left), (rectDlgw.bottom-rectDlgw.top) + (rectDlgc.bottom-rectDlgc.top)-(rectMainc.bottom-rectMainc.top)+1, 1);//Align inner DIALOG to MAINWINDOWMoveWindow(hDlg, 0, 0, rectDlgw.right, rectDlgw.bottom, 1);UpdateWindow(hWnd);return TRUE;
}

上面这两句是重点,这两句下面的功能是计算后调整SDI窗体,让它刚好将Dialog装入进去,并将它们显示在屏幕中央位置。

(DLGPROC)Mainform 参数指的是回调函数,在CALLBACK函数Mainform中,对Dialog Editor摆放的控件进行操作。

步骤三:操作Dialog 控件

LRESULT CALLBACK Mainform(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{switch (message){case WM_INITDIALOG:{//Change DIALOG iconHICON hIcon = LoadIcon(hInst, MAKEINTRESOURCE(IDI_ICON3));SetClassLong(hDlg, GCL_HICONSM, (LONG)hIcon);GetDlgItem(hDlg, IDC_PROGRESS1);SendMessage(GetDlgItem(hDlg, IDC_PROGRESS1), PBM_SETRANGE, MAKEWPARAM(0, 0), MAKELPARAM(0, 59)); //SendMessage(GetDlgItem(hDlg, IDC_PROGRESS1), PBM_SETPOS, (WPARAM)(0, 65), (LPARAM)(0, 0)); SetTimer(hDlg, 1, 1000, NULL);//KillTimer(hDlg, 1);break;/*typedef struct _SYSTEMTIME {WORD wYear;WORD wMonth;WORD wDayOfWeek;WORD wDay;WORD wHour;WORD wMinute;WORD wSecond;WORD wMilliseconds;} SYSTEMTIME, *PSYSTEMTIME, *LPSYSTEMTIME;*/SYSTEMTIME st, lt;GetSystemTime(&st);GetLocalTime(&lt);SendMessage(GetDlgItem(hDlg, IDC_PROGRESS1), PBM_SETPOS, (WPARAM)(0, st.wSecond), (LPARAM)(0, 0)); break;case WM_TIMER:{SYSTEMTIME st, lt;GetSystemTime(&st);GetLocalTime(&lt);SendMessage(GetDlgItem(hDlg, IDC_PROGRESS1), PBM_SETPOS, (WPARAM)(0, st.wSecond), (LPARAM)(0, 0)); }break;case WM_PAINT:break;case WM_CTLCOLORDLG:break;case WM_ERASEBKGND:case WM_NCPAINT:break;case WM_SYSCOMMAND:if (wParam == SC_CLOSE){EndDialog (hDlg, TRUE);KillTimer(hDlg, 1);PostQuitMessage(0);return(TRUE);}break;case WM_COMMAND://if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL) if (LOWORD(wParam) == IDOK) {EndDialog(hDlg, LOWORD(wParam));KillTimer(hDlg, 1);PostQuitMessage(0);return TRUE;}if (LOWORD(wParam) == IDCANCEL){if (!IsDlgButtonChecked(hDlg, IDC_CHECK1)){CheckDlgButton(hDlg, IDC_CHECK1, BST_CHECKED);}if (!IsDlgButtonChecked(hDlg, IDC_RADIO1)){CheckDlgButton(hDlg, IDC_RADIO1, BST_CHECKED);}}if (LOWORD(wParam) == IDC_BUTTON4){SendMessage(hDlg, WM_SYSCOMMAND, SC_MAXIMIZE, 0); }if (LOWORD(wParam) == IDC_BUTTON3){SendMessage(hDlg, WM_SYSCOMMAND, SC_MINIMIZE, 0); }if (LOWORD(wParam) == IDC_BUTTON2){SetWindowText(GetDlgItem(hDlg, IDC_EDIT1),"Message 1"); SetWindowText(GetDlgItem(hDlg, IDC_EDIT2),"Message 2"); SetWindowText(GetDlgItem(hDlg, IDC_EDIT3),"Message 3"); }break;}return FALSE;
}

上面的代码包括对Edit文本框的操作,对Button的操作,对复选和Radio的操作,还用到了一个SYSTEMTIME结构和操作函数,让界面上的指示条随秒而动。对MFC的习练比WIN32功能多一些,编写程序比WIN32方便,但代码不如WIN32程序精练直接。

祝福CSDN朋友们节日快乐,学业进步、职场升级,身体健康!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/149547.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

怎么将Linux上的文件上传到github上

文章目录 1. 先在window浏览器中创建一个存储项目的仓库2. 复制你的ssh下的地址1) 生成ssh密钥 : 在Linux虚拟机的终端中,运行以下命令生成ssh密钥2)将ssh密钥添加到github账号 : 运行以下命令来获取公钥内容:3. 克隆GitHub存储库:在Linux虚拟机的终端中,导航到您想要将文件上…

ESP32设备驱动-I2C-LCD1602显示屏驱动

I2C-LCD1602显示屏驱动 1、LCD1602介绍 LCD1602液晶显示器是广泛使用的一种字符型液晶显示模块。它是由字符型液晶显示屏(LCD)、控制驱动主电路HD44780及其扩展驱动电路HD44100,以及少量电阻、电容元件和结构件等装配在PCB板上而组成。 通过前面的实例我们知道,并口方式…

GPX可视化工具 GPX航迹预览工具

背景 当我们收到别人分享的航迹文档,即gpx文档时,如何快速的进行浏览呢?我们可以使用GIS软件来打开gpx文档并显示gpx中所记录的航迹,例如常用的GIS软件有googleEarth, Basecamp, GPXsee, GPX E…

Net相关的各类开源项目

Net相关的各类开源项目 WPFHandyControlLive-ChartsWPFDeveloperswpf-uidesignStylet WebScheduleMasterYiShaAdminBlog.CoreNebula.AdminNewLife.CubeOpenAuth UnityuGUIUnityCsReferenceEpitomeMyUnityFrameWorkKSFrameworkTowerDefense-GameFramework-Demo 通用ClientServer…

mac电脑任务管理器 Things3 for Mac中文

Things 3是一款效率软件,可以帮助用户规划一天行程、管理项目,并使使用者按部就班地朝目标迈进。以下是Things 3的主要特点和功能: 待办事项:以“待办事项”为基本组成部分,每一则待办事项都是迈向大成就的一小步。用…

C++stackqueue

目录 一、stack 1.1 简要介绍 1.2 小试身手 1.3 模拟实现 二、queue 2.1 简要介绍 2.2 小试身手 2.3 模拟实现 三、deque 3.1 简要介绍 3.2 分析底层 四、priority_queue 4.1 简要介绍 4.2 小试身手 4.3 模拟实现 五、仿函数/函数对象 5.1 简要介绍 一…

优化方法的应用(optimtool.example)

import optimtool as oo from optimtool.base import np, sp, pltpip install optimtool>2.4.2优化方法的应用(optimtool.example) import optimtool.example as oeLasso问题(Lasso) oe.Lasso.[函数名]([矩阵A], [矩阵b], [因…

模型训练环境相关(CUDA、PyTorch)

模型训练环境相关(CUDA、PyTorch) 1. 查看当前 GPU 所能支持的最高版本的 CUDA2. 如何判断是否安装了 CUDA3. 安装 PyTorch3.1 创建虚拟环境3.2 激活并进入虚拟环境3.3 安装 PyTorch 1. 查看当前 GPU 所能支持的最高版本的 CUDA 打开 NVIDIA 控制面板&a…

Android学习之路(20) 进程间通信

IPC IPC为 (Inter-Process Communication) 缩写,称为进程间通信或跨进程通信,指两个进程间进行数据交换的过程。安卓中主要采用 Binder 进行进程间通信,当然也支持其他 IPC 方式,如:管道,Socket&#xff0…

后端面经学习自测(二)

文章目录 1、Http1.1和2.0的区别大概是什么?HTTP & HTTPS 2、HTTP,用户后续的操作,服务端如何知道属于同一个用户cookie & session & token手机验证码登录流程SSO单点登录 3、如果服务端是一个集群机器?4、hashmap是线…

华为云云耀云服务器L实例评测|基于canal缓存自动更新流程 SpringBoot项目应用案例和源码

前言 最近华为云云耀云服务器L实例上新,也搞了一台来玩,期间遇到各种问题,在解决问题的过程中学到不少和运维相关的知识。 在之前的博客中,介绍过canal的安装和配置,参考博客 拉取创建canal镜像配置相关参数 & …

《Jetpack Compose从入门到实战》第一章 全新的 Android UI 框架

书籍源码 Compose官方文档 《Jetpack Compose从入门到实战》第一章 全新的 Android UI 框架 《Jetpack Compose从入门到实战》 第二章 了解常用UI组件 《Jetpack Compose从入门到实战》第三章 定制 UI 视图 《Jetpack Compose从入门到实战》第八章 Compose页面 导航 《Jet…

【Overload游戏引擎分析】画场景网格的Shader

Overload引擎地址: GitHub - adriengivry/Overload: 3D Game engine with editor 一、栅格绘制基本原理 Overload Editor启动之后,场景视图中有栅格线,这个在很多软件中都有。刚开始我猜测它应该是通过绘制线实现的。阅读代码发现&#xff0…

JAVA面经整理(8)

一)为什么要有区,段,页? 1)页是内存和磁盘之间交互的基本单位内存中的值修改之后刷到磁盘的时候还是以页为单位的索引结构给程序员提供了高效的索引实现方式,不过索引信息以及数据记录都是记录在文件上面的,确切来说是…

矩阵的c++实现(2)

上一次我们了解了矩阵的运算和如何使用矩阵解决斐波那契数列&#xff0c;这一次我们多看看例题&#xff0c;了解什么情况下用矩阵比较合适。 先看例题 1.洛谷P1939 【模板】矩阵加速&#xff08;数列&#xff09; 模板题应该很简单。 补&#xff1a;1<n<10^9 10^9肯定…

给列起别名(关键字:as)

MySQL从小白到总裁完整教程目录:https://blog.csdn.net/weixin_67859959/article/details/129334507?spm1001.2014.3001.5502 语法格式: select 列名1 as 别名1, 列名2 as 别名2, 列名n as 别名n from 表名; 说明&#xff1a;可以省略as&#xff0c;列名和别名之间使用空格…

MySQL——使用mysqldump备份与恢复数据

目录 1.mysqldump简介 2.mysqldump备份数据 2.1 备份所有数据库 2.2 备份一个/多个数据库 2.3 备份指定库中的指定表 3.mysqldump恢复数据 3.1 恢复数据库 3.2 恢复数据表 1.mysqldump简介 mysqldump命令可以将数据库中指定或所有的库、表导出为SQL脚本。表的结构和表中…

并网逆变器+VSG控制+预同步控制+电流电流双环控制(Simulink仿真实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

火山引擎 ByteHouse:TB 级数据下,如何实现高效、稳定的数据导入

更多技术交流、求职机会&#xff0c;欢迎关注字节跳动数据平台微信公众号&#xff0c;回复【1】进入官方交流群 近期&#xff0c;火山引擎开发者社区、火山引擎数智平台&#xff08;VeDI&#xff09;联合举办以《数智化转型背景下的火山引擎大数据技术揭秘》为主题的线下 Meeup…

做好微信CRM,这些功能你不可不知!

在当前的数字化时代&#xff0c;微信已成为我们日常生活中的重要元素&#xff0c;无论是社交交流、信息传递还是商务合作&#xff0c;微信都扮演着不可或缺的角色。为了更有效地管理微信资源并提高工作效率&#xff0c;很多组织和公司都选择引入微信CRM系统。那么&#xff0c;怎…