VC6 WIN32,Dialog为主窗口编程

news2024/12/27 13:25:40

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 variable

   hWnd = 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 box
	HWND hDlg = CreateDialog(hInst, MAKEINTRESOURCE(IDD_MAINFORM), hWnd, (DLGPROC)Mainform);
	// Show DIALOG box
	ShowWindow(hDlg, SW_SHOWNA);
	UpdateWindow(hWnd);

	RECT rectDlgw, rectDlgc, rectMainw, rectMainc;
	GetWindowRect(hWnd, &rectMainw);					//Dialog window area
	GetClientRect(hWnd, &rectMainc);					//Dialog client area
	GetWindowRect(hDlg, &rectDlgw);						//Dialog window area
	GetClientRect(hDlg, &rectDlgc);						//Dialog client area

	RECT 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 area
	MoveWindow(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 MAINWINDOW
	MoveWindow(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 icon
				HICON 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.coloradmin.cn/o/1062906.html

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

相关文章

微服务的初步使用

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

git提交代码实际操作

1.仓库的代码 2.克隆代码下存在的分支 git clobe https://gitee.com/sadsadasad/big-event-11.git 3.查看当下存在的分支 git branch -a 在很多情况下,我们是要围绕着dev分支进行开发,所以我们可以在开发之前问明白围绕那个分支进行开发。 4.直接拉去dev分支代码 5.如果没在…

LabVIEW开发教学实验室自动化INL和DNL测试系统

LabVIEW开发教学实验室自动化INL和DNL测试系统 如今,几乎所有的测量仪器都是基于微处理器的设备。模拟输入量在进行数字处理之前被转换为数字量。对于参加电气和电子测量课程的学生来说,了解ADC以及如何欣赏其性能至关重要。ADC的不确定性可以根据其传输…

2.3 Node2vec(图神经网络笔记)

BFS:广度优先 DFS:深度优先 描述,当前已从 t 节点到达 V 节点,可以选择 x1、x2、x3、t任意一个节点 dtx 0 ,从t - v - t ,回到原点 dtx 1 ,还是说从t出发,离t节点距离为1,有z、x…

beego-简单项目写法--后续放到git上

Beego案例-新闻发布系统 1.注册 后台代码和昨天案例代码一致。,所以这里面只写一个注册的业务流程图。 **业务流程图 ** 2.登陆 业务流程图 登陆和注册业务和我们昨天登陆和注册基本一样,所以就不再重复写这个代码 但是我们遇到的问题是如何做代码的迁移&…

Python 无废话-基础知识流程控制语句

If 流程控制语句 最常见的控制流语句是if 语句。在自然语言中,if 语句念起来可能是:“如果条件为真,执行子句中的代码。”在Python中的条件语句用于根据特定条件执行不同的代码块条件。 用代码描述如下: cost 60000 if cost &…

数据结构——红黑树(详解性质+C++模拟)

文章目录 前言红黑树的概念红黑树的性质红黑树结点的定义红黑树的插入操作1. **按照二叉搜索树的规则插入新结点**2. 检测新节点插入后,红黑树的性质是否遭到破坏 红黑树的验证总结 前言 本篇博客将为大家重点讲述红黑树这一数据结构,讲解其实现的方式即…

[NSSRound#1 Basic]sql_by_sql - 二次注入+布尔盲注||sqlmap

进入注册界面后   假设sql:update user set password ‘’ where username ‘’ and password ‘’     此时如果我们注册的用户名是admin’–、admin’#、admin’–的话   update user set password ‘123’ where username ‘admin’#’ and passwor…

[NISACTF 2022]hardsql - quine注入

题目描述:$password$_POST[passwd]; $sql"SELECT passwd FROM users WHERE usernamebilala and passwd$password;"; 从描述看出是quine注入,且用户名要是bilala 1、经测试,参数为:username&passwd&login登录&a…

重置系统后出现 press F12 to clear the tpm press Esc to reject this chan

案例分享: 外星人M15 R7重置系统后出现下图问题,暂时不能下一步。 原文如下: A configuration change was requested to Clear this computers TPM (Trusted platform module) warning:clearing erases information stored on the tpm.you …

正向代理和反向代理

正向代理和反向代理 1.正向代理和反向代理,squid,Nginx2.正向代理主要作用:3.反向代理主要作用:4.透明代理 1.正向代理和反向代理,squid,Nginx 1.用途不同:正向代理的典型用途是为在防火墙内的…

深度学习-卷积神经网络-AlexNET

文章目录 前言1.不同卷积神经网络模型的精度2.不同神经网络概述3.卷积神经网络-单通道4.卷积神经网络-多通道5.池化层6.全连接层7.网络架构8.Relu激活函数9.双GPU10.单GPU模型 1.LeNet-52.AlexNet1.架构2.局部响应归一化(VGG中取消了)3.重叠/不重叠池化4…

一文解释mapState的来龙去脉

mapState Vuex 提供的辅助函数之一,将 store 中的状态映射到组件的计算属性中,使得在组件中可以轻松地访问 Vuex store 中的状态值 MapState(映射状态) 在我们的 Count.vue 组件中,可以使用 mapState 来更简洁地获取 count 的状态值 首先&…

毕设-原创医疗预约挂号平台分享

医疗预约挂号平台 不是尚医通项目,先看项目质量(有源码论文) 项目链接:医疗预约挂号平台git地址 演示视频:医疗预约挂号平台 功能结构图 登录注册模块:该模块具体分为登录和注册两个功能,这些…

Android 开发错误集合

🔥 开发错误集合一 🔥 Caused by: java.lang.ClassNotFoundException: Didnt find class "com.mask.app.ui.LoginRegisterActivity" on path: DexPathList[[zip file "/data/app/~~NMvHVhj8V6-HwGbh2amXDA/com.mask.app-PWbg4xIlETQ3eVY…

解密京东面试:如何应对Redis缓存穿透?

亲爱的小伙伴们,大家好!欢迎来到小米的微信公众号,今天我们要探讨一个在面试中可能会遇到的热门话题——Redis缓存穿透以及如何解决它。这个话题对于那些渴望进入技术领域的小伙伴们来说,可是必备的哦! 认识Redis缓存…

javaWeb蛋糕商城(前后台)

一、项目功能 1.前台功能 商品基本展示,包括推荐商品展示和类型商品展示.推荐商品包括条幅推荐,热销推荐和新品推荐.按照商品类型展示商品.商品详细信息展示.商品加入购物车.修改购物车内商品信息,例如数量等.用户登录.用户注册.修改个人信息,包括密码和收获信息.购物车付款.…

数值分析学习笔记——误差【华科B站教程版本】

误差 误差:一个物理量的真实值与计算值之间的误差 误差来源与分类 模型误差:对问题所抽象出来的数学/物理模型是误差的,比如要有一些假设条件才进行理论的推导观测误差:测量得到的模型的参数的值的误差方法误差(截断…

React项目部署 - Nginx配置

写在前面:博主是一只经过实战开发历练后投身培训事业的“小山猪”,昵称取自动画片《狮子王》中的“彭彭”,总是以乐观、积极的心态对待周边的事物。本人的技术路线从Java全栈工程师一路奔向大数据开发、数据挖掘领域,如今终有小成…

保险业SAP转型:奠定坚实的基础

保险业面临着许多新的挑战:从新的市场参与者到人工智能和物联网。如何在这种快节奏的现实中满足客户的需求,降低成本,加速增长?首先,让我们考虑一下数字化转型成功是什么样子的,以及如何实现它。在这篇文章…