=
=
=
几乎所有的windows客户端都可以调整大小,所以用户根据自己的喜好调整客户端的大小和位置。
但是当该客户端退出后,重新运行客户端的时候,我们往往又要调整自己喜好的大小和位置。
微信的windows客户端做了记住客户端退出时候的大小和位置,下次运行的时候直接,窗口直接显示为你喜好的大小和位置。
现在的任务就是八一八这个小小的功能。
首先,你肯定是想到了使用配置文件。再客户端退出的时候,把客户端窗口的信息记录在一个配置文件中,一般都是.ini文件。读写配置文件 很简单,这里就不再赘述了。
但是使用配置文件的一个致命缺点就是别人很容易发现这个文件,或许可以对其进行一定的修改。
所以,要来一个高大上的方法,让用户不容易找到这个信息。这就是写入到注册区,然后读取注册区,实现记住上次关闭时的windows信息。
你不需要单独存储客户端的width和height等变量,windows为我们提供了一个结构体:
WINDOWPLACEMENT
原型:
typedef struct tagWINDOWPLACEMENT
{ /* wndpl */
UINT length;
UINT flags;
UINT showCmd;
POINT ptMinPosition;
POINT ptMaxPosition;
RECT rcNormalPosition;
} WINDOWPLACEMENT;
意义:
length
length指定了结构的长度,以字节为单位。
flags
flags指定了控制最小化窗口的位置的标志以及复原窗口的方法。这个成员可以是下面列出的标志之一,或都是: · WPF_SETMINPOSITION 表明可以指定最小化窗口的x和y坐标。如果是在ptMinPosition成员中设置坐标,则必须指定这个标志。
showCmd
WPF_RESTORETOMAXIMIZED表明复原后的窗口将会被最大化,而不管它在最小化之前是否是最大化的。这个设置仅在下一次复原窗口时有效。它不改变缺省的复原操作。这个标志仅当showCmd成员中指定了SW_SHOWMINIMIZED时才有效。
showCmd 指定了窗口的当前显示状态。这个成员可以是下列值之一: ·
SW_HIDE 隐藏窗口,使其它窗口变为激活的。
· SW_MINIMIZE 最小化指定的窗口,并激活系统列表中的顶层窗口。
· SW_RESTORE 激活并显示窗口。如果窗口是最小化或最大化的,Windows将把它恢复到原来的大小和位置(与SW_SHOWNORMAL相同)。
· SW_SHOW 激活窗口并按照当前的位置和大小显示窗口。
· SW_SHOWMAXIMIZED 激活窗口并将其显示为最大化的。
· SW_SHOWMINIMIZED 激活窗口并将其显示为图标。
· SW_SHOWMINNOACTIVE 将窗口显示为图标。当前激活的窗口仍保持激活状态。
· SW_SHOWNA 按当前状态显示窗口。当前激活的窗口仍保持激活状态。
· SW_SHOWNOACTIVATE 按最近的位置和大小显示窗口。当前激活的窗口仍保持激活状态。
· SW_SHOWNORMAL 激活并显示窗口。如果窗口是最小化或最大化的,Windows将它恢复到原来的大小和位置(与SW_RESTORE相同)。
ptMinPosition
ptMinPosition 指定了窗口被最小化时左上角的位置。
ptMaxPosition
ptMaxPosition 指定了窗口被最大化时左上角的位置。
rcNormalPosition
rcNormalPosition 指定了窗口处于正常状态(复原)时的坐标。
那么我们如何获得这个struct的信息呢:
GetWindowPlacement函数可以做到:
函数原型
BOOL GetWindowPlacement(HWND hWnd,WINDOWPLACEMENT*lpwndpl);
参数
hWnd:窗口句柄。
lpwndpl:指向WINDOWPLACEMENT结构的指针,该结构存贮显示状态和位置信息。
在调用GetWindowPlacement函数之前,将WINDOWPLACEMENT结构的长度设为
sizeof(WIDNOWPLACEMENT)。如果lpwndpl->length设置不正确则函数GetWindowPlacement将失败。
接下来的任务就是如何写入注册区了,这里我们首先使用MFC中的函数,这样可以更简单一些。
The WriteProfileBinary() is part of the MFC class CWinApp which simply dumps the WINDOWPLACEMENT structure into the registry as a REG_BINARY value called “WP” in a key called MainFrame. A good idea, especially for child windows of the CMainFrame class, is to replace the hard-coded MainFrame with the caption of the frame.
BOOL CMainFrame::DestroyWindow()
{
WINDOWPLACEMENT wp;
GetWindowPlacement(&wp);
AfxGetApp()->WriteProfileBinary("MainFrame", "WP", (LPBYTE)&wp, sizeof(wp));
return CMDIFrameWnd::DestroyWindow();
}
接下来就是如何从注册区中取数据了:
使用MFC中提供的函数:GetProfileBinary
void CMainFrame::OnShowWindow(BOOL bShow, UINT nStatus)
{
CMDIFrameWnd::OnShowWindow(bShow, nStatus);
static bool bOnce = true;
if(bShow && !IsWindowVisible()
&& bOnce)
{
bOnce = false;
WINDOWPLACEMENT *lwp;
UINT nl;
if(AfxGetApp()->GetProfileBinary("MainFrame", "WP", (LPBYTE*)&lwp, &nl))
{
SetWindowPlacement(lwp);
delete [] lwp;
}
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
这样就实现了MFC中存取windows的信息了。
接下来会讨论win32 application中如何实现上面的操作。
————————————————
版权声明:本文为CSDN博主「一苇渡江694」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/wangshubo1989/article/details/50688418
from:https://blog.csdn.net/wangshubo1989/article/details/50688418
=
=
=
相关推荐
redis-windows客户端redis-windows客户端redis-windows客户端redis-windows客户端
Rsync是一款强大的、开源的文件同步和备份工具,最初在Unix系统上开发,但随着cwRsync的出现,它也被移植到了Windows平台上。cwRsync是Windows下的Rsync实现,允许用户在Windows环境下享受Rsync的功能,进行文件和...
在压缩包“robo3t-1.2.1-windows-x86_64-portable-version”中,我们看到的是一个名为Robo 3T(原名Robomongo)的MongoDB客户端。Robo 3T是一款强大的图形化工具,它提供了上述提到的各种功能,并且因其直观的用户...
标题中的“64位客户端-instantclient-basic-windows.x64-11.2.0.4.0.zip”表明这是一个针对64位Windows系统的Oracle Instant Client基础版,版本号为11.2.0.4.0。这个压缩包包含了运行在Windows平台上,与64位Oracle...
总之,MQTTBox作为Windows上的MQTT客户端,为开发者和系统管理员提供了一个直观的工具,用于测试和监控MQTT服务器的性能,同时也方便了物联网设备的调试和管理。通过熟练掌握MQTTBox的使用,可以在物联网项目中节省...
Git Windows客户端
Oracle 19c是Oracle数据库的一个重要版本,尤其在Windows平台上,它提供了全面的功能和优化,使得数据库管理和开发更为高效。以下将详细讲解Oracle 19c Windows客户端的关键知识点: 1. **Oracle Client**: Oracle...
Jellyfin Media Player v1.11.1,jellyfin windows 播放器客户端,来源:https://github.com/jellyfin/jellyfin-media-player/releases/tag/v1.11.1
5.期待你能在项目中找到乐趣和灵感,也欢迎你的分享和反馈! 【资源说明】 基于Nodejs实现的客户端桌面端影音管理软件源码(服务端+客户端)-期末大作业.zip 基于Nodejs实现的客户端桌面端影音管理软件源码(服务端+...
Java开发案例-springboot-12-集成socket.io服务端和客户端-源代码+文档.rar Java开发案例-springboot-12-集成socket.io服务端和客户端-源代码+文档.rar Java开发案例-springboot-12-集成socket.io服务端和客户端-源...
向日葵客户端是一款广泛应用于远程控制领域的软件,其12.5版本专为Windows x64操作系统设计。这款客户端让用户能够轻松实现对远程计算机的访问和管理,无论距离多远,只要有网络连接,就可以像坐在电脑前一样操作。...
锐捷网络客户端 3.73 -3 锐捷网络客户端 3.73 -3 锐捷网络客户端 3.73 -3
首先,CH-HCNetSDK(Windows32)V5.2.1.3_build20160513是海康威视提供的客户端开发包,它包含了一系列的接口和函数,用于与海康威视的设备进行通信,如网络摄像机、NVR等。这些接口涵盖了设备的连接、视频流的获取...
mysql客户端安装-仅Windows安装版
标题"redis客户端-windows"表明我们要讨论的是适用于Windows操作系统的Redis客户端,用于连接本地的Redis服务器。 描述中提到的"适用于本地主机连接redis的小测试"暗示了这个客户端软件主要用于开发和测试环境,...
3. Windows 8.1 64位:在64位系统上运行,N2N客户端可以利用更多的系统资源,提高性能和稳定性。 **二、N2N_V1与N2N_V2的区别** N2N_V1和N2N_V2是N2N技术的两个主要版本。V1是基础版本,主要特点是简单易用,支持...
这个exe文件是专为Windows操作系统设计的,用户可以通过运行这个文件来安装Vertica的客户端工具,从而连接到Vertica数据库服务器,进行数据管理和分析。 在安装过程中,用户需要配置数据库连接信息,如服务器地址、...
Nextcloud客户端 for Windows V3.5.0-x64 NextCloud官方源代码安装包+客户端合集 https://blog.csdn.net/liujinbao8000/article/details/81365937
这个版本——"instantclient-basic-windows.x64-11.2.0.4.0"是专为64位Windows系统设计的,适用于11.2.0.4.0版本的Oracle数据库。 Oracle Instant Client包含以下关键组件: 1. **oci.dll**:Oracle Call ...
附件2:电子科技大学课程考试-网考客户端-1.9.2-正式版.exe