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.mzph.cn/news/95420.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux shell编程学习笔记4:修改命令行提示符格式(内容和颜色)

一、命令行提示符格式内容因shell类型而异 Linux终端命令行提示符内容格式则因shell的类型而异,例如CoreLinux默认的shell是sh,其命令行提示符为黑底白字,内容为: tcbox:/$ 其中,tc为当前用户名,box为主机…

Postman使用实例

Postman使用实例 实体类Emp package com.example.springboot_postman.pojo;import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor;import javax.persistence.*; import j…

基于SpringBoot的图书进销存管理系统

目录 前言 一、技术栈 二、系统功能介绍 用户信息管理 图书类型管理 商品退货管理 客户信息管理 图书添加 客户添加 应收金额 三、核心代码 1、登录模块 2、文件上传模块 3、代码封装 前言 随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实…

c语言练习78:执⾏操作后的变量值

字符串函数汇总 1. strlen :计算字符串的⻓度。 2. strcpy :将⼀个字符串复制到另⼀个字符串中。 3. strcat :将⼀个字符串连接到另⼀个字符串的末尾。 4. strcmp :⽐较两个字符串是否相等。 5. strncmp :⽐较两个…

JavaEE-网络编程套接字(UDP/TCP)

下面写一个简单的UDP客户端服务器流程 思路: 对于服务器端:读取请求,并解析–> 根据解析出的请求,做出响应(这里是一个回显,)–>把响应写回客户端 对于客户端:从控制台读取用户输入的内容–>从控制…

微服务的初步使用

环境说明 jdk1.8 maven3.6.3 mysql8 idea2022 spring cloud2022.0.8 微服务案例的搭建 新建父工程 打开IDEA,File->New ->Project,填写Name(工程名称)和Location(工程存储位置),选…

【OSCAR开源产业大会分论坛】开源大模型走向何方?

再过俩月,ChatGPT 即将迎来推出一周年纪念日。作为开历史先河的 AI 大模型,ChatGPT 像一针猛戳进千行百业中枢神经的兴奋剂,在全球掀起空前绝后的 AI 军备竞赛热潮。 近一年来,我们看到 GPT-3.5 完成向多模态的 GPT-4 进化&#x…

人类的智能是可变的

智能是指个体在学习、问题解决、理解和适应环境等方面的能力。与机器智能相比,人类的智能是多样且可塑的,可以在不同的领域和任务中发展和改进,还可以通过变化的学习和经验积累来提高。我们通过接触新的知识、经历新的情境,并进行…

二项分布以及实现

文章目录 前言所谓二项分布就是只会产生两种结果的概率 1.概念 前言 所谓二项分布就是只会产生两种结果的概率 1.概念 下面是一个二项分布的的theano实现 import numpy as np import theano import theano.tensor as T from theano.tensor.nnet import conv from theano.ten…

基于JavaWeb技术的在线考试系统设计与实现

目录 前言 一、技术栈 二、系统功能介绍 用户信息管理 考试统计管理 专业列表管理 忘记密码人员登记管理 修改密码 试卷信息 考试信息管理 三、核心代码 1、登录模块 2、文件上传模块 3、代码封装 前言 随着信息技术在管理上越来越深入而广泛的应用,管理…

Linux Vi编辑器基础操作指南

Linux Vi编辑器基础操作指南 Linux中的Vi是一个强大的文本编辑器,虽然它有一些陡峭的学习曲线,但一旦掌握了基本操作,它就变得非常高效。以下是Vi编辑器的一些基本用法: 打开Vi编辑器: vi 文件名退出Vi编辑器&#xff…

ArcGIS Maps SDK for JS:监听按钮点击事件控制图层的visible属性

文章目录 1 需求描述2 解决方案 1 需求描述 现在有这么一个需求:在地图中添加一些图层,添加图层列表按钮。打开图层列表后用户会打开某些图层使其可见,要求关闭图层列表时,隐藏某些图层(若visibletrue) 2…

“牛市陷阱?还是回调?是好?还是坏!“

比特币六年来首次在9月实现正回报 比特币回调:发生了什么以及接下来会发生什么? 美元的主导地位:揭示美元涟漪效应 长期持有者持有的比特币供应比例正式达到历史新高 比特币六年来首次在9月实现正回报 随着 10 月份的到来,比特币6年来首次在9月份实…

代码随想录Day57、58 | 392.判断子序列 | 115. 不同的子序列 | 583. 两个字符串的删除操作 | 72. 编辑距离

392. 判断子序列 class Solution { public:bool isSubsequence(string s, string t) {int m s.size();int n t.size();vector<vector<int>> f(m1,vector<int>(n1,0)); //f[i][j]:s前i-1个字符&#xff0c;t前j-1个字符中字符数相等的个数。for(int i1;i<…

1026 程序运行时间

要获得一个 C 语言程序的运行时间&#xff0c;常用的方法是调用头文件 time.h&#xff0c;其中提供了 clock() 函数&#xff0c;可以捕捉从程序开始运行到 clock() 被调用时所耗费的时间。这个时间单位是 clock tick&#xff0c;即“时钟打点”。同时还有一个常数 CLK_TCK&…

STM32HAL库CRC学习及测试记录

STM32HAL库CRC学习及测试记录 1.CRC的校验原理2.基本原理3.几个基本概念13.1.1 CRC检验码的计算13.1.2 错误检测13.2 STM32中的CRC 4.CRC功能描述5.STM32Cube生成工程6.看官方说如何使用这个驱动程序7.实验现象 1.CRC的校验原理 循环冗余校验(CRC)计算单元是根据固定的生成多项…

Android学习之路(17) Android Adapter详解

Adapter基础讲解 本节引言 从本节开始我们要讲的UI控件都是跟Adapter(适配器)打交道的&#xff0c;了解并学会使用这个Adapter很重要&#xff0c; Adapter是用来帮助填充数据的中间桥梁&#xff0c;简单点说就是&#xff1a;将各种数据以合适的形式显示到view上,提供 给用户看…

腾讯内部最通俗易懂的项目管理PPT

大家好&#xff0c;我是老原。 这两年&#xff0c;大厂裁员的风是一点不减&#xff0c;也有不少人吐槽大厂又卷又累&#xff0c;但仍然有很多人都想进大厂。 有不少项目经理&#xff0c;几年下来混迹各类大厂&#xff0c;履历刷得是杠杠的。 光鲜的履历、过硬的薪资、优质的…

CSS 常用样式 文字三属性

CSS中常用的文字样式有三个属性&#xff1a;颜色&#xff08;color&#xff09;、字体&#xff08;font-family&#xff09;和大小&#xff08;font-size&#xff09;。 颜色&#xff08;color&#xff09;&#xff1a;用于设置文字的颜色&#xff0c;可以使用命名颜色、十六进…

Python中取2023, 9, 1——2023, 10, 31的全部时间

使用datetime.date()函数定义了开始和结束日期。然后&#xff0c;我们使用datetime.timedelta()类创建了一个时间范围&#xff0c;其中n表示从开始日期到结束日期之间的天数。最后&#xff0c;我们使用一个for循环迭代时间范围内的日期&#xff0c;并打印每个日期。示例代码演示…