mfc 怎样使悬浮窗口始终停靠在主程序框架的

mfc 怎样使悬浮窗口始终停靠在主程序框架的,第1张

在处理这两消息WM_MOVE、WM_SIZE函数中:获得当前主窗体在屏幕中的位置和大小,然后获得你悬浮窗的大小。

悬浮窗的左上角位置(x,y)x=主窗口右上角x坐标 - 悬浮窗宽度。y=主窗口y坐标

1、将对话框资源初始化使用函数参数的方式传递,然后根据传入参数进行对话框的实例化。

与一般的传递一样,只是将实例化放入DLL的函数中。

2、也可能有其它形式资源参数的传递需求吧。

VC++到VS中以后:

从main函数开始,没有main从wmain开始wmain是main的扩展(支持Unicode字符,比如你要给你的程序传参为Unicode字符的话)

不同的是很多编程时都把main或wmain给隐藏了,留下的是另一些主函数,但这些假的主函数名要么是#define

为main或wmain

窗口程序de主函数是WinMain或wWinMain(),同样也常被隐藏掉

MFC编程中

主函数是AfxWinMain()

而AfxWinMain()也是由WinMain()函数调用的,并且WinMain()所有的功能就是调用了AfxWinMain()

template<typename T>

class init {

public:

init( int n );

};

template<typename C>

class mystring {

};

template<typename C>

init<mystring<C> > something( 5 );

WinMain()是工程的入口,相当于win32函数的main(),但是在MFC中不能直接看到,MFC系统封装好的。一般在 入口函数工程名+App文件中的InitInstance()开始,但是一般功能不会涉及到这里,添加功能可以从工程名+Dlg文件中的OnInitDialog()函数开始调试,这个是对话框的初始化,形成对话框和对对话框的属性设置都是从OnInitDialog()这里开始的

主机上另外再连接一个监视器,这样主机就可以检测到两个显示器,设置显示器属性,将屏幕扩展到第二屏(采用扩展模式)。在VC编程时,可以检测到第二屏的信息(甚至多屏),比如屏的个数,各个屏的分辨率,各个屏的句柄,获得了这些信息后,就可以在第二屏上 *** 作了,比如画图之类。

在编程中要用到相关的结构体和函数,这些都已经包装好,在multimomh头文件中,该头文件VC自带有。在要用的的地方包含该头文件,注意在包含前面要加上一句宏定义:

#define COMPILE_MULTIMON_STUBS

几个重要的结构体和函数

EnumDisplayMonitors( )该函数对当前用户系统中所包含的显示器进行枚举。应用程序就是通过与该函数交流得知,当前用户系统中

所拥有的显示器个数以及其名称。

MonitorInfoex 和MonitorInfo 。在这两个结构中保存着相应显示器的相关信息,如坐标、是否为主显示器等。

GetMonitorInfo ( )取得指定显示器的相关信息,如物理显示区大小等。

MonitorFromPoint ( )取得指定点所在的显示器句柄。

MonitorFromRect ( )取得指定矩形所在的显示器句柄。

MonitorFromWindow( )取得指定窗口所在的显示器句柄

MonitorEnumProc( ) 。当应用程序调用EnumDisplayMonitors ( )查询显示器个数时,系统自动为每一个显示器调用一次该函数。应用程序可以依此判断显示器的个数、位置及显示区域的大小等信息。

编程实现,获得第二屏信息,在主屏上点击一按钮,在第二屏上显示一幅图像。

在应用程序初始化时,调用EnumDisplayMonitors(NULL,NULL,MonitorEnumProc,0);,该函数枚举显示器,得到显示器信息,方便以后调用。其中MonitorEnumProc,是一回调函数,这个回调函数是要自己写的

/

函数名:MonitorEnumProc()

输入参数:HMONITOR hMonitor ---显示器句柄

HDC hdcMonitor ----显示器DC句柄

LPRECT lprcMonitor-----

LPARAM dwData-----EnumDisplayMonitors传来的数据

返回:bool

功能:若返回为真,EnumDisplayMonitors继续枚举,

若返回为假,EnumDisplayMonitors停止枚举,从而获得显示器信息

将显示器个数保存在numScreen,分辨率信息保存在rect

/

BOOL CALLBACK MonitorEnumProc(HMONITOR hMonitor,

HDC hdcMonitor, LPRECT lprcMonitor, LPARAM dwData)

{

static BOOL first = TRUE; //标志

//保存显示器信息

MONITORINFO monitorinfo;

monitorinfocbSize = sizeof(MONITORINFO);

//获得显示器信息,将信息保存到monitorinfo中

GetMonitorInfo(hMonitor, &monitorinfo);

//若检测到主屏

if(monitorinfodwFlags == MONITORINFOF_PRIMARY)

{

if(first) //第一次检测到主屏

{

first = FALSE;

numScreen = 1;

//将显示器的分辨率信息保存到rect

rect[0] = monitorinforcMonitor;

return TRUE;

}

else //第二次检测到主屏,说明所有的监视器都已经检测了一遍,故可以停止检测了

{

first = TRUE; //标志复位

return FALSE; //结束检测

}

}

rect[numScreen] = monitorinforcMonitor;

numScreen++;

return TRUE;

}

创建对话框,通过MoveWindow 函数将对话框移动到第二屏上即可

if(numScreen == 2)

{

CSecondScr pDlg = new CSecondScr;

pDlg->Create (IDD_DIALOG1,this);

pDlg->ShowWindow (SW_SHOW);

pDlg->MoveWindow (rect[1]left ,rect[1]top ,rect[1]Width (),rect[1]Height (),TRUE);

}

点击阅读全文

打开CSDN,阅读体验更佳

最新发布 MFC Windows 程序设计[六十]之窗口分屏(附源码)

MFC是微软公司提供的一个类库(class libraries),用以减少应用程序开发人员的工作量。其中包含大量Windows句柄封装类和很多Windows的内建控件和组件的封装类。有很多初学MFC的小伙伴们都觉得MFC比较难学,看书吧,看了就忘了,网上的一些教程又是写的含糊不清,故而学习起来很吃力 故此,本专栏亲自研究,实践,由易到难,层层深入,将调试过程中所遭所遇进行详细讲解,注意事项进行一一列举,希望能够帮助到各位初学MFC的小伙伴,避免走弯路,费时费力。

继续访问

VC++双屏显示源码

双屏显示源代码,是双屏编程人员必不可少的参考代码,可实现扩展模式、克隆模式。

mfc多屏检测及双击窗口最大化

在OnInitDialog函数中添加:EnumDisplayMonitors(NULL, NULL, MonitorEnumProc, NULL);MonitorEnumProc函数:CArray <MONITORINFO, MONITORINFO&>g_arMonitorInfo; BOOL CALLBACK MonitorEnumProc(HMONITOR hMonitor

继续访问

VC++在MFC程序窗口中实现全屏显示切换

内容索引:VC/C++源码,界面编程,全屏VC++在MFC程序窗口中实现全屏显示切换,有点像微软PPT幻灯片播放中的全屏效果。在VC++的MFC程序中,有一个专一用来切换全屏的按钮,点击这个按钮,程序的主界面将全屏,标题栏、任务栏、菜单栏统统隐藏掉了,只显示主要内容及一个返回标准窗体的按钮,MFC模式的全屏切换,是不是有必要学习一下呢?

窗口移动到扩展屏(简单 *** 作)

这是一个简单的窗口移动到扩展屏的代码,主要实现了:1扩展屏的分辨率大小测定 2 主屏上的程序窗口移动到扩展屏上并全屏显示

基于MFC的屏幕分屏rar

基于VC++ 的屏幕分屏显示工具

MFC双屏显示

//一、为工程添加一个类Spxs,在Spxsh中添加 public: afx_msg void OnActivate(UINT nState, CWnd pWndOther, BOOL bMinimized); //二、主cpp里添加: #include"Spxsh" Spxs dlg1 //初始化函数里添加: dlg1Create(IDD_TEST_111,GetDesktopWi

继续访问

VC对话框全屏显示及相应控件位置改变(转)

一、简单对话框全屏显示方法 在OnInitDialog()中任意加入: 1、ModifyStyle(WS_CAPTION,0,0); //如果不想去掉标题栏,去掉该句。 SendMessage(WM_SYSCOMMAND,SC_MAXIMIZE,0); 2、ShowWindow(SW_SHOWMAXIMIZED); 二、复杂一点的对话框全屏显示方法,随屏幕的分辩率而调节

继续访问

热门推荐 VC++实现Windows中双显示器(主屏、扩展屏)各种 *** 作的源码工程

Windows中鼠标右键桌面->“屏幕分辨率”时出现的“更改显示器的外观”对话框下实现了双屏 *** 作的诸多功能,如:主屏的设置、主屏和扩展屏的分辨率、方向、屏幕合并等。实际项目中需要通过VC++代码实现这些功能,用了将近一周的事件,在网上经过几番搜索、整合及改写,终于开发出了所需功能。以下将cpp源码贴出,以弥补此方面网上资料的匮乏。完整工程见下载资源(VS2010下开发)。 // Multi_

继续访问

MFC 获取屏幕客户区(及显示器大小)

CRect rectWorkArea; SystemParametersInfo(SPI_GETWORKAREA,0,&rectWorkArea,SPIF_SENDCHANGE);//获取屏幕客户区大小 转载于:>

以上就是关于mfc 怎样使悬浮窗口始终停靠在主程序框架的全部的内容,包括:mfc 怎样使悬浮窗口始终停靠在主程序框架的、mfc 主程序在DLL对话框资源显示之前传递DLL对话框初始化参数、VC++编程中主函数即main函数在哪或者程序从哪里开始运行等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10135274.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存