
你的思路不对
第一 直接把WriteLog里的值赋值给m_Log 然后刷新edit值就可以看见
第二 直接写个WriteLog函数 把内容赋值给m_Log 刷新edit值也可以
在初始化函数里你什么都没有 也不明白你说的关联是什么意思
把一个函数跟一个变量关联? 怎么个关联法?
使用SetWindowPos函数
CWnd::SetWindowPosBOOL SetWindowPos( const CWnd pWndInsertAfter, int x, int y, int cx, int cy,UINT nFlags )。返回值如果函数成功,则返回非零值;否则返回0。
注意:这个窗口不是活动窗口。应用程序不能激活一个非活动窗口但同时又不把它带到Z轴次序的顶部。应用程序可以没有任何限制地改变活动窗口的Z轴次序。非顶层窗口可能拥有一个顶层窗口,但是反之则不成立。任何被顶层窗口拥有的窗口(例如对话框)都将自己变为顶层窗口,以确保所有被拥有的窗口位于它们的拥有者上方。在Windows 31或更新的版本中,可以将窗口移动到Z轴次序的顶部,并通过设置它们的WS_EX_TOPMOST风格而将之锁定在那里。
使用MoveWindow函数
void CWnd::MoveWindow( int x, int y, int nWidth, int nHeight, BOOL bRepaint = TRUE );
void CWnd::MoveWindow( LPCRECT lpRect, BOOL bRepaint = TRUE );
参数:
x指定了CWnd的左边的新位置。
y指定了CWnd的顶部的新位置。
nWidth指定了CWnd的新宽度。
nHeight指定了CWnd的新高度。
bRepaint指定了是否要重画CWnd。如果为TRUE,则CWnd象通常那样在OnPaint消息处理函数中接收到一条WM_PAINT消息。如果这个参数为FALSE,则不会发生任何类型的重画 *** 作。这应用于客户区、非客户区(包括标题条和滚动条)和由于CWnd移动而露出的父窗口的任何部分。当这个参数为FALSE的时候,应用程序必须明确地使CWnd和父窗口中必须重画的部分无效或重画
lpRectCRect对象或RECT结构,指定了新的大小和位置。说明这个函数改变窗口的位置和大小。对于顶层的CWnd对象,x和y参数是相对于屏幕的左上角的。对于子对象,它们是相对于父窗口客户区的左上角的。
主机上另外再连接一个监视器,这样主机就可以检测到两个显示器,设置显示器属性,将屏幕扩展到第二屏(采用扩展模式)。在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);//获取屏幕客户区大小 转载于:>
你在dos命令窗直接打命令:
wmic
desktopmonitor
get
screenwidth,
screenheight
就有分辨率了,例如,显示:
screenheight
screenwidth
768
1024
写c/c++程序,可以用:
system("wmic
desktopmonitor
get
screenwidth,
screenheight");
大小和窗口一致
--
这是平时说的full-screen
(满频)。程序里需要计算和安排的。
得到屏幕大小,把窗口设置为全屛
int m_xScreen = GetSystemMetrics(SM_CXSCREEN);
int m_yScreen = GetSystemMetrics(SM_CYSCREEN);
SetWindowLong(GetSafeHwnd(),GWL_EXSTYLE,WS_EX_TOOLWINDOW);SetLayeredWindow(m_hWnd,80);SetWindowPos(&CWnd::wndTopMost,0,0,m_xScreen,m_yScreen,SWP_SHOWWINDOW);SetForegroundWindow();
实现透明函数
void SetLayeredWindow(HWND m_hWnd,int nRate)
{HINSTANCE hInst;if ((hInst = LoadLibrary(_T("USER32dll"))) != NULL)
{
SetWindowLong(m_hWnd, GWL_EXSTYLE, GetWindowLong(m_hWnd, GWL_EXSTYLE) | WS_EX_LAYERED);typedef BOOL (WINAPI lpfnSetTransparent)(HWND hWnd, COLORREF crKey, BYTE bAlpha, DWORD dwFlags);if (hInst){lpfnSetTransparent pFnSetTransparent = NULL;pFnSetTransparent= (lpfnSetTransparent)GetProcAddress(hInst, "SetLayeredWindowAttributes");if (pFnSetTransparent)pFnSetTransparent(m_hWnd, 0, (255 nRate) / 100, LWA_ALPHA);}
}
}
选项卡=Resource view下有dialog 资源里面有2个对话筐
一个是about对话框还一个就是运行时候的对话框你双击就可以d出来然后就可以像VB里面的一样更改它的一些控件
以上就是关于如何用VC++2010编写一个获取屏幕分辨率的MFC 以下是我的编写过程,实在进行不下去了,求指导!全部的内容,包括:如何用VC++2010编写一个获取屏幕分辨率的MFC 以下是我的编写过程,实在进行不下去了,求指导!、在MFC怎么中设置窗口大小和位置、mfc设置主副屏等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)