mfc怎么让自己创建的Dialog显示在屏幕的左上角

时间:2022-11-01 16:14:54
就是让程序的左上角和屏幕的左上角在一起
还有怎么让程序在屏幕的正中间

15 个解决方案

#1


2个函数
MoveWindow
CenterWindow

#2


可以用楼上的方法
也可以在对话框属性中设置(至少VS2008有)

#3


通过相对位置计算一下,直接

#4


MoveWindow

#5


引用 2 楼 sunnysab 的回复:
可以用楼上的方法
也可以在对话框属性中设置(至少VS2008有)


我用的是vs2005,那个是对话框的哪个属性?

#6


左上角:SetWindowPos(m_hWnd, NULL, 0, 0, 0,0,SWP_NOZORDER | SWP_NOSIZE);
屏幕中间:
int nScreenCX = ::GetSystemMetrics(SM_CXSCREEN);
int nScreenCY = ::GetSystemMetrics(SM_CYSCREEN);
CRect rect;
GetWindowRect(m_hWnd, rect);
int x = (nScreenCX  - rect.Width()) / 2;
int y = (nScreenCY - rect.Height()) / 2;
SetWindowPos(m_hWnd, NULL, x, y, 0,0,SWP_NOZORDER | SWP_NOSIZE);
 

#7


引用 6 楼 gmg2012 的回复:
左上角:SetWindowPos(m_hWnd, NULL, 0, 0, 0,0,SWP_NOZORDER | SWP_NOSIZE);
屏幕中间:
int nScreenCX = ::GetSystemMetrics(SM_CXSCREEN);
int nScreenCY = ::GetSystemMetrics(SM_CYSCREEN);
CRect rect;
GetWindowRect(m_hWnd, rect);
int x = (nScreenCX  - rect.Width()) / 2;
int y = (nScreenCY - rect.Height()) / 2;
SetWindowPos(m_hWnd, NULL, x, y, 0,0,SWP_NOZORDER | SWP_NOSIZE);
 


大哥,这个窗口句柄怎么得到啊

#8


m_hWnd     这参数怎么得到的?

#9


CWnd 派生的类都有这个成员。


#10


是有这个成员,但是这值不能用在这个函数里面啊
报这个错 'CWnd::SetWindowPos' : cannot convert parameter 1 from 'HWND' to 'const CWnd *'

#11


用全局域 
::SetWindowPos

如果要用在CWnd派生类中直接使用SetWindowPos成员函数
需要这样写:
左上角:SetWindowPos(NULL, 0, 0, 0,0,SWP_NOZORDER | SWP_NOSIZE);
屏幕中间:
int nScreenCX = ::GetSystemMetrics(SM_CXSCREEN);
int nScreenCY = ::GetSystemMetrics(SM_CYSCREEN);
CRect rect;
GetWindowRect(& rect);
int x = (nScreenCX  - rect.Width()) / 2;
int y = (nScreenCY - rect.Height()) / 2;
SetWindowPos(NULL, x, y, 0,0,SWP_NOZORDER | SWP_NOSIZE);




#12


引用 11 楼 gmg2012 的回复:
用全局域 
::SetWindowPos

如果要用在CWnd派生类中直接使用SetWindowPos成员函数
需要这样写:
左上角:SetWindowPos(NULL, 0, 0, 0,0,SWP_NOZORDER | SWP_NOSIZE);
屏幕中间:
int nScreenCX = ::GetSystemMetrics(SM_CXSCREEN);
int nScreenCY = ::GetSystemMetrics(SM_CYSCREEN);
CRect rect;
GetWindowRect(& rect);
int x = (nScreenCX  - rect.Width()) / 2;
int y = (nScreenCY - rect.Height()) / 2;
SetWindowPos(NULL, x, y, 0,0,SWP_NOZORDER | SWP_NOSIZE);


没有成功,就是那个左上角显示的那个,

#13


在中间显示的那个,测试看不出来,默认就在中间显示吧。

#14


引用 5 楼 wangen12345 的回复:
Quote: 引用 2 楼 sunnysab 的回复:

可以用楼上的方法
也可以在对话框属性中设置(至少VS2008有)


我用的是vs2005,那个是对话框的哪个属性?


MFC对话框不是在资源里吗?打开这个对话框(在VS中),点Alt+Enter,有个窗口属性框(和控件属性差不多),有这一项。
mfc怎么让自己创建的Dialog显示在屏幕的左上角

#15


谢谢,暂时解决不了,不过上面的方法都是对的,不过是单纯的mfc来说的,我是用mfc开发的wince手持机,显示后跟屏幕上面有一个状态栏似的,不是程序的问题是手持机可能有其它的方法。
结贴,谢谢各位

#1


2个函数
MoveWindow
CenterWindow

#2


可以用楼上的方法
也可以在对话框属性中设置(至少VS2008有)

#3


通过相对位置计算一下,直接

#4


MoveWindow

#5


引用 2 楼 sunnysab 的回复:
可以用楼上的方法
也可以在对话框属性中设置(至少VS2008有)


我用的是vs2005,那个是对话框的哪个属性?

#6


左上角:SetWindowPos(m_hWnd, NULL, 0, 0, 0,0,SWP_NOZORDER | SWP_NOSIZE);
屏幕中间:
int nScreenCX = ::GetSystemMetrics(SM_CXSCREEN);
int nScreenCY = ::GetSystemMetrics(SM_CYSCREEN);
CRect rect;
GetWindowRect(m_hWnd, rect);
int x = (nScreenCX  - rect.Width()) / 2;
int y = (nScreenCY - rect.Height()) / 2;
SetWindowPos(m_hWnd, NULL, x, y, 0,0,SWP_NOZORDER | SWP_NOSIZE);
 

#7


引用 6 楼 gmg2012 的回复:
左上角:SetWindowPos(m_hWnd, NULL, 0, 0, 0,0,SWP_NOZORDER | SWP_NOSIZE);
屏幕中间:
int nScreenCX = ::GetSystemMetrics(SM_CXSCREEN);
int nScreenCY = ::GetSystemMetrics(SM_CYSCREEN);
CRect rect;
GetWindowRect(m_hWnd, rect);
int x = (nScreenCX  - rect.Width()) / 2;
int y = (nScreenCY - rect.Height()) / 2;
SetWindowPos(m_hWnd, NULL, x, y, 0,0,SWP_NOZORDER | SWP_NOSIZE);
 


大哥,这个窗口句柄怎么得到啊

#8


m_hWnd     这参数怎么得到的?

#9


CWnd 派生的类都有这个成员。


#10


是有这个成员,但是这值不能用在这个函数里面啊
报这个错 'CWnd::SetWindowPos' : cannot convert parameter 1 from 'HWND' to 'const CWnd *'

#11


用全局域 
::SetWindowPos

如果要用在CWnd派生类中直接使用SetWindowPos成员函数
需要这样写:
左上角:SetWindowPos(NULL, 0, 0, 0,0,SWP_NOZORDER | SWP_NOSIZE);
屏幕中间:
int nScreenCX = ::GetSystemMetrics(SM_CXSCREEN);
int nScreenCY = ::GetSystemMetrics(SM_CYSCREEN);
CRect rect;
GetWindowRect(& rect);
int x = (nScreenCX  - rect.Width()) / 2;
int y = (nScreenCY - rect.Height()) / 2;
SetWindowPos(NULL, x, y, 0,0,SWP_NOZORDER | SWP_NOSIZE);




#12


引用 11 楼 gmg2012 的回复:
用全局域 
::SetWindowPos

如果要用在CWnd派生类中直接使用SetWindowPos成员函数
需要这样写:
左上角:SetWindowPos(NULL, 0, 0, 0,0,SWP_NOZORDER | SWP_NOSIZE);
屏幕中间:
int nScreenCX = ::GetSystemMetrics(SM_CXSCREEN);
int nScreenCY = ::GetSystemMetrics(SM_CYSCREEN);
CRect rect;
GetWindowRect(& rect);
int x = (nScreenCX  - rect.Width()) / 2;
int y = (nScreenCY - rect.Height()) / 2;
SetWindowPos(NULL, x, y, 0,0,SWP_NOZORDER | SWP_NOSIZE);


没有成功,就是那个左上角显示的那个,

#13


在中间显示的那个,测试看不出来,默认就在中间显示吧。

#14


引用 5 楼 wangen12345 的回复:
Quote: 引用 2 楼 sunnysab 的回复:

可以用楼上的方法
也可以在对话框属性中设置(至少VS2008有)


我用的是vs2005,那个是对话框的哪个属性?


MFC对话框不是在资源里吗?打开这个对话框(在VS中),点Alt+Enter,有个窗口属性框(和控件属性差不多),有这一项。
mfc怎么让自己创建的Dialog显示在屏幕的左上角

#15


谢谢,暂时解决不了,不过上面的方法都是对的,不过是单纯的mfc来说的,我是用mfc开发的wince手持机,显示后跟屏幕上面有一个状态栏似的,不是程序的问题是手持机可能有其它的方法。
结贴,谢谢各位