对话框位置算是windows的bug吗? 是 :"SetWindowPos(&wndTopMost,0,0,0,0,SWP_NOSIZE|SWP_NOMOVE|SWP_SHOWWINDOW);"这句 ? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 SetWindowPos(&wndTopMost,0,0,0,0,SWP_NOSIZE|SWP_NOMOVE|SWP_SHOWWINDOW);?? 我就知道 会猜测是这一句有问题,很明显跟这一句没有关系啊,不是有SWP_NOSIZE ,SWP_NOMOVE吗? 会忽略 cx,cy,x, y这4个参数比如我改成 SetWindowPos(&wndTopMost,100,100,0,0,SWP_NOSIZE|SWP_NOMOVE|SWP_SHOWWINDOW);这样,对话框的位置也并不会 出现(100,100)啊。所以我才奇怪,对话框的位置到底是根据什么决定的。为什么对话框的位置无故出现在(0,0)对整个工程搜索:movewindow, setwindowpos,这2个移动位置的函数,代码里并不存在movewindow ,而setwindowpos只有一个地方用到,就是:SetWindowPos(&wndTopMost,0,0,0,0,SWP_NOSIZE|SWP_NOMOVE|SWP_SHOWWINDOW); 这里用到 SetWindowPos(&wndTopMost,0,0,0,0,SWP_NOSIZE|SWP_NOMOVE|SWP_SHOWWINDOW);你只是指定了不移动而已,windows本身就是在0,0位置创建的。 我就知道 会猜测是这一句有问题,很明显跟这一句没有关系啊,不是有SWP_NOSIZE ,SWP_NOMOVE吗? 会忽略 cx,cy,x, y这4个参数比如我改成 SetWindowPos(&wndTopMost,100,100,0,0,SWP_NOSIZE|SWP_NOMOVE|SWP_SHOWWINDOW);这样,对话框的位置也并不会 出现(100,100)啊。所以我才奇怪,对话框的位置到底是根据什么决定的。为什么对话框的位置无故出现在(0,0)对整个工程搜索:movewindow, setwindowpos,这2个移动位置的函数,代码里并不存在movewindow ,而setwindowpos只有一个地方用到,就是:SetWindowPos(&wndTopMost,0,0,0,0,SWP_NOSIZE|SWP_NOMOVE|SWP_SHOWWINDOW); 这里用到对话框本身位置由资源里面设定值决定,而且我怀疑它创建的方式很可能是在(0,0)创建然后移动到指定位置而已,所以这没什么好奇怪的吧 我就知道 会猜测是这一句有问题,很明显跟这一句没有关系啊,不是有SWP_NOSIZE ,SWP_NOMOVE吗? 会忽略 cx,cy,x, y这4个参数比如我改成 SetWindowPos(&wndTopMost,100,100,0,0,SWP_NOSIZE|SWP_NOMOVE|SWP_SHOWWINDOW);这样,对话框的位置也并不会 出现(100,100)啊。所以我才奇怪,对话框的位置到底是根据什么决定的。为什么对话框的位置无故出现在(0,0)对整个工程搜索:movewindow, setwindowpos,这2个移动位置的函数,代码里并不存在movewindow ,而setwindowpos只有一个地方用到,就是:SetWindowPos(&wndTopMost,0,0,0,0,SWP_NOSIZE|SWP_NOMOVE|SWP_SHOWWINDOW); 这里用到对话框本身位置由资源里面设定值决定,而且我怀疑它创建的方式很可能是在(0,0)创建然后移动到指定位置而已,所以这没什么好奇怪的吧你这么一说,我特意看了资源,发现所有对话框都有相应的参数,确实有起始坐标x,y,而且默认都是(0,0).但是对话框工程运行后,对话框是在中间位置,说明windows强行将对话框移动到中间位置的.以上不是本贴重点.下面讨论本贴遇到的问题:本帖里的对话框的属性xpos,ypos的值都是0,0,按照 上面的说法,windows 也会强制移动到中间位置。事实上,本帖对话框的位置并非如此。而且 可以确定的是:对话框出现在0,0,绝对不会是我提供的代码setwindowpos导致的。而是 :由于使用了 windowplacement进行隐藏界面,windows此时没有按照常规去强行移动到中间位置。这恐怕是真实的原因。在这个项目里,我还遇到另一个小问题:我对托盘进行右键,然后右键后弹出一个pop up菜单,这个菜单只有过一个功能,就是关闭程序。我的问题是,有时候,菜单弹不出来, 有时候能弹出来,很是郁闷。getcursorpos, trackpopupmenu 我就知道 会猜测是这一句有问题,很明显跟这一句没有关系啊,不是有SWP_NOSIZE ,SWP_NOMOVE吗? 会忽略 cx,cy,x, y这4个参数比如我改成 SetWindowPos(&wndTopMost,100,100,0,0,SWP_NOSIZE|SWP_NOMOVE|SWP_SHOWWINDOW);这样,对话框的位置也并不会 出现(100,100)啊。所以我才奇怪,对话框的位置到底是根据什么决定的。为什么对话框的位置无故出现在(0,0)对整个工程搜索:movewindow, setwindowpos,这2个移动位置的函数,代码里并不存在movewindow ,而setwindowpos只有一个地方用到,就是:SetWindowPos(&wndTopMost,0,0,0,0,SWP_NOSIZE|SWP_NOMOVE|SWP_SHOWWINDOW); 这里用到对话框本身位置由资源里面设定值决定,而且我怀疑它创建的方式很可能是在(0,0)创建然后移动到指定位置而已,所以这没什么好奇怪的吧你这么一说,我特意看了资源,发现所有对话框都有相应的参数,确实有起始坐标x,y,而且默认都是(0,0).但是对话框工程运行后,对话框是在中间位置,说明windows强行将对话框移动到中间位置的.以上不是本贴重点.下面讨论本贴遇到的问题:本帖里的对话框的属性xpos,ypos的值都是0,0,按照 上面的说法,windows 也会强制移动到中间位置。事实上,本帖对话框的位置并非如此。而且 可以确定的是:对话框出现在0,0,绝对不会是我提供的代码setwindowpos导致的。而是 :由于使用了 windowplacement进行隐藏界面,windows此时没有按照常规去强行移动到中间位置。这恐怕是真实的原因。在这个项目里,我还遇到另一个小问题:我对托盘进行右键,然后右键后弹出一个pop up菜单,这个菜单只有过一个功能,就是关闭程序。我的问题是,有时候,菜单弹不出来, 有时候能弹出来,很是郁闷。getcursorpos, trackpopupmenu既然谈到位置, 也说说遇到的一个奇怪问题:在onintdialog 里使用movewindow所遇到的,movewindow(0,0,, 这样,对话框并不会移动到屏幕的0,0处。但是 你只要 movewindow到其他地方,绝对会移过去。 这非常奇怪。为此,我手痒,就将movewindow改成setwindowpos试试,结果setwindowpos 0,0成功了。不知道我表达清楚没 你的m_wpWindowPlacement的rcNormalPosition有没有初始化?隐藏界面前先GetWindowPlacement吧 发完整代码给你吧。 我肯定先 getwindwowplacement 了啊 NOTIFYICONDATA nid; nid.cbSize=(DWORD)sizeof(NOTIFYICONDATA); nid.hWnd=this->m_hWnd; nid.uID=IDR_MAINFRAME; nid.uFlags=NIF_ICON|NIF_MESSAGE|NIF_TIP ; nid.uCallbackMessage= WM_SHOWTASK;//自定义的消息名称 nid.hIcon=LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_MAINFRAME)); strcpy(nid.szTip,"Test"); Shell_NotifyIcon(NIM_ADD,&nid); //在托盘区添加图标 GetWindowPlacement(&m_wpWindowPlacement); //恢复时用 ModifyStyleEx(WS_EX_APPWINDOW,WS_EX_TOOLWINDOW);//从任务栏中去掉 WINDOWPLACEMENT wp; wp.length=sizeof(WINDOWPLACEMENT); wp.flags=WPF_RESTORETOMAXIMIZED; wp.showCmd=SW_HIDE; SetWindowPlacement(&wp);另一段代码:m_wpWindowPlacement.flags=WPF_RESTORETOMAXIMIZED; m_wpWindowPlacement.showCmd=SW_SHOW; SetWindowPlacement(&m_wpWindowPlacement); SetWindowPos(&wndTopMost,100,100,0,0,SWP_NOSIZE|SWP_NOMOVE|SWP_SHOWWINDOW);有兴趣的朋友可以自己 验证这代码,代码来自网上,窗口的位置是出现在 (0,0)原因 我已经在 6楼解释过了.其实对话框工程也好,还是 某些情况下创建对话框, 系统很可能 会强制移动你的对话框的位置。恰好在 托盘隐藏的方式,系统没有强制,所以对话框的位置在(0,0)本帖里的对话框的属性xpos,ypos的值都是0,0,按照 上面的说法,windows 也会强制移动到中间位置。事实上,本帖对话框的位置并非如此。而且 可以确定的是:对话框出现在0,0,绝对不会是我提供的代码setwindowpos导致的。而是 :由于使用了 windowplacement进行隐藏界面,windows此时没有按照常规去强行移动到中间位置。这恐怕是真实的原因。我再说一个特例:是非模式对话框的例子(单文档工程)里探出一个非模式对话框,该对话框的位置会出现在 父窗口的(0,0), 代码为:CMainFrame::OnCreate里的 if(m_pDlg) { m_pDlg->Create(IDD_DIALOG1,this); m_pDlg->ShowWindow(SW_SHOW); }而如果我们把this改成 NULL. 则对话框出现在屏幕的中间位置.这几个例子, 足以证明,操作系统其实对对话框的位置会按照一定的规则去调整的。 我就知道 会猜测是这一句有问题,很明显跟这一句没有关系啊,不是有SWP_NOSIZE ,SWP_NOMOVE吗? 会忽略 cx,cy,x, y这4个参数比如我改成 SetWindowPos(&wndTopMost,100,100,0,0,SWP_NOSIZE|SWP_NOMOVE|SWP_SHOWWINDOW);这样,对话框的位置也并不会 出现(100,100)啊。所以我才奇怪,对话框的位置到底是根据什么决定的。为什么对话框的位置无故出现在(0,0)对整个工程搜索:movewindow, setwindowpos,这2个移动位置的函数,代码里并不存在movewindow ,而setwindowpos只有一个地方用到,就是:SetWindowPos(&wndTopMost,0,0,0,0,SWP_NOSIZE|SWP_NOMOVE|SWP_SHOWWINDOW); 这里用到对话框本身位置由资源里面设定值决定,而且我怀疑它创建的方式很可能是在(0,0)创建然后移动到指定位置而已,所以这没什么好奇怪的吧你这么一说,我特意看了资源,发现所有对话框都有相应的参数,确实有起始坐标x,y,而且默认都是(0,0).但是对话框工程运行后,对话框是在中间位置,说明windows强行将对话框移动到中间位置的.以上不是本贴重点.下面讨论本贴遇到的问题:本帖里的对话框的属性xpos,ypos的值都是0,0,按照 上面的说法,windows 也会强制移动到中间位置。事实上,本帖对话框的位置并非如此。而且 可以确定的是:对话框出现在0,0,绝对不会是我提供的代码setwindowpos导致的。而是 :由于使用了 windowplacement进行隐藏界面,windows此时没有按照常规去强行移动到中间位置。这恐怕是真实的原因。在这个项目里,我还遇到另一个小问题:我对托盘进行右键,然后右键后弹出一个pop up菜单,这个菜单只有过一个功能,就是关闭程序。我的问题是,有时候,菜单弹不出来, 有时候能弹出来,很是郁闷。getcursorpos, trackpopupmenu既然谈到位置, 也说说遇到的一个奇怪问题:在onintdialog 里使用movewindow所遇到的,movewindow(0,0,, 这样,对话框并不会移动到屏幕的0,0处。但是 你只要 movewindow到其他地方,绝对会移过去。 这非常奇怪。为此,我手痒,就将movewindow改成setwindowpos试试,结果setwindowpos 0,0成功了。不知道我表达清楚没movewindow(0,0..)这个用法 似乎不管用的 msdn没有给出说明 MFC的问题吧,估计MFC在调用onintdialog之后会调用CenterWindow你可以用SDK的方法试试,看看在WM_INITDIALOG MoveWindow管不管用 MFC的问题吧,估计MFC在调用onintdialog之后会调用CenterWindow你可以用SDK的方法试试,看看在WM_INITDIALOG MoveWindow管不管用是的, sdk成功了INT_PTR CALLBACK MainDlg(HWND hdlg,UINT message ,WPARAM wp,LPARAM lp){ switch(message) { case WM_INITDIALOG: MoveWindow(hdlg,50,0,700,800,TRUE); return 1; break; case WM_CLOSE: EndDialog(hdlg,0); return 1; break; } return 0;} 你是MFC的话,对话框窗口出来以后会自动调用 CenterWindow; 求助,为什么读取失败 两个客户端启动后,发现第一个客户端发送的数据不能到达服务器端? FD_WRITE并不能表明连接建立成功 多线程,网络问题。退出对话框没能断开与服务器的通信,(内详)请高人多多指教!! 怎么让窗口置底呢。就是要显示桌面才能看到。 请问能否在style为child的Dialog中添加菜单??? 寻高速sun Solaris 8下载地址,iso格式,谢谢200分 给所有想学习网络编程的人 怎样才能真正学好VC++ qt打开别人的项目出现的无法打开c盘的obj文件 求高手给一个用VC编写的简易计算器程序,有基本的四则运算就好,谢谢 求助,关于VS开发工具
??
这样,对话框的位置也并不会 出现(100,100)啊。所以我才奇怪,对话框的位置到底是根据什么决定的。为什么对话框的位置无故出现在(0,0)对整个工程搜索:movewindow, setwindowpos,这2个移动位置的函数,代码里并不存在movewindow ,而setwindowpos只有一个地方用到,就是:
SetWindowPos(&wndTopMost,0,0,0,0,SWP_NOSIZE|SWP_NOMOVE|SWP_SHOWWINDOW); 这里用到
你只是指定了不移动而已,windows本身就是在0,0位置创建的。
这样,对话框的位置也并不会 出现(100,100)啊。所以我才奇怪,对话框的位置到底是根据什么决定的。为什么对话框的位置无故出现在(0,0)对整个工程搜索:movewindow, setwindowpos,这2个移动位置的函数,代码里并不存在movewindow ,而setwindowpos只有一个地方用到,就是:
SetWindowPos(&wndTopMost,0,0,0,0,SWP_NOSIZE|SWP_NOMOVE|SWP_SHOWWINDOW); 这里用到
对话框本身位置由资源里面设定值决定,而且我怀疑它创建的方式很可能是在(0,0)创建然后移动到指定位置而已,所以这没什么好奇怪的吧
这样,对话框的位置也并不会 出现(100,100)啊。所以我才奇怪,对话框的位置到底是根据什么决定的。为什么对话框的位置无故出现在(0,0)对整个工程搜索:movewindow, setwindowpos,这2个移动位置的函数,代码里并不存在movewindow ,而setwindowpos只有一个地方用到,就是:
SetWindowPos(&wndTopMost,0,0,0,0,SWP_NOSIZE|SWP_NOMOVE|SWP_SHOWWINDOW); 这里用到
对话框本身位置由资源里面设定值决定,而且我怀疑它创建的方式很可能是在(0,0)创建然后移动到指定位置而已,所以这没什么好奇怪的吧
你这么一说,我特意看了资源,发现所有对话框都有相应的参数,确实有起始坐标x,y,而且默认都是(0,0).但是对话框工程运行后,对话框是在中间位置,说明windows强行将对话框移动到中间位置的.以上不是本贴重点.
下面讨论本贴遇到的问题:本帖里的对话框的属性xpos,ypos的值都是0,0,按照 上面的说法,windows 也会强制移动到中间位置。事实上,本帖对话框的位置并非如此。而且 可以确定的是:对话框出现在0,0,绝对不会是我提供的代码setwindowpos导致的。而是 :由于使用了 windowplacement进行隐藏界面,windows此时没有按照常规去强行移动到中间位置。
这恐怕是真实的原因。
在这个项目里,我还遇到另一个小问题:我对托盘进行右键,然后右键后弹出一个pop up菜单,这个菜单只有过一个功能,就是关闭程序。我的问题是,有时候,菜单弹不出来, 有时候能弹出来,很是郁闷。getcursorpos, trackpopupmenu
这样,对话框的位置也并不会 出现(100,100)啊。所以我才奇怪,对话框的位置到底是根据什么决定的。为什么对话框的位置无故出现在(0,0)对整个工程搜索:movewindow, setwindowpos,这2个移动位置的函数,代码里并不存在movewindow ,而setwindowpos只有一个地方用到,就是:
SetWindowPos(&wndTopMost,0,0,0,0,SWP_NOSIZE|SWP_NOMOVE|SWP_SHOWWINDOW); 这里用到
对话框本身位置由资源里面设定值决定,而且我怀疑它创建的方式很可能是在(0,0)创建然后移动到指定位置而已,所以这没什么好奇怪的吧
你这么一说,我特意看了资源,发现所有对话框都有相应的参数,确实有起始坐标x,y,而且默认都是(0,0).但是对话框工程运行后,对话框是在中间位置,说明windows强行将对话框移动到中间位置的.以上不是本贴重点.
下面讨论本贴遇到的问题:本帖里的对话框的属性xpos,ypos的值都是0,0,按照 上面的说法,windows 也会强制移动到中间位置。事实上,本帖对话框的位置并非如此。而且 可以确定的是:对话框出现在0,0,绝对不会是我提供的代码setwindowpos导致的。而是 :由于使用了 windowplacement进行隐藏界面,windows此时没有按照常规去强行移动到中间位置。
这恐怕是真实的原因。
在这个项目里,我还遇到另一个小问题:我对托盘进行右键,然后右键后弹出一个pop up菜单,这个菜单只有过一个功能,就是关闭程序。我的问题是,有时候,菜单弹不出来, 有时候能弹出来,很是郁闷。getcursorpos, trackpopupmenu
既然谈到位置, 也说说遇到的一个奇怪问题:在onintdialog 里使用movewindow所遇到的,movewindow(0,0,, 这样,对话框并不会移动到屏幕的0,0处。但是 你只要 movewindow到其他地方,绝对会移过去。 这非常奇怪。为此,我手痒,就将movewindow改成setwindowpos试试,结果setwindowpos 0,0成功了。不知道我表达清楚没
隐藏界面前先GetWindowPlacement吧
发完整代码给你吧。 我肯定先 getwindwowplacement 了啊 NOTIFYICONDATA nid;
nid.cbSize=(DWORD)sizeof(NOTIFYICONDATA);
nid.hWnd=this->m_hWnd;
nid.uID=IDR_MAINFRAME;
nid.uFlags=NIF_ICON|NIF_MESSAGE|NIF_TIP ;
nid.uCallbackMessage= WM_SHOWTASK;//自定义的消息名称
nid.hIcon=LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_MAINFRAME));
strcpy(nid.szTip,"Test");
Shell_NotifyIcon(NIM_ADD,&nid); //在托盘区添加图标 GetWindowPlacement(&m_wpWindowPlacement); //恢复时用
ModifyStyleEx(WS_EX_APPWINDOW,WS_EX_TOOLWINDOW);//从任务栏中去掉 WINDOWPLACEMENT wp;
wp.length=sizeof(WINDOWPLACEMENT);
wp.flags=WPF_RESTORETOMAXIMIZED;
wp.showCmd=SW_HIDE;
SetWindowPlacement(&wp);
另一段代码:m_wpWindowPlacement.flags=WPF_RESTORETOMAXIMIZED;
m_wpWindowPlacement.showCmd=SW_SHOW;
SetWindowPlacement(&m_wpWindowPlacement);
SetWindowPos(&wndTopMost,100,100,0,0,SWP_NOSIZE|SWP_NOMOVE|SWP_SHOWWINDOW);
有兴趣的朋友可以自己 验证这代码,代码来自网上,窗口的位置是出现在 (0,0)原因 我已经在 6楼解释过了.其实对话框工程也好,还是 某些情况下创建对话框, 系统很可能 会强制移动你的对话框的位置。恰好在 托盘隐藏的方式,系统没有强制,所以对话框的位置在(0,0)
本帖里的对话框的属性xpos,ypos的值都是0,0,按照 上面的说法,windows 也会强制移动到中间位置。事实上,本帖对话框的位置并非如此。而且 可以确定的是:对话框出现在0,0,绝对不会是我提供的代码setwindowpos导致的。而是 :由于使用了 windowplacement进行隐藏界面,windows此时没有按照常规去强行移动到中间位置。
这恐怕是真实的原因。
我再说一个特例:是非模式对话框的例子(单文档工程)里探出一个非模式对话框,该对话框的位置会出现在 父窗口的(0,0), 代码为:
CMainFrame::OnCreate里的
if(m_pDlg)
{
m_pDlg->Create(IDD_DIALOG1,this);
m_pDlg->ShowWindow(SW_SHOW);
}而如果我们把this改成 NULL. 则对话框出现在屏幕的中间位置.这几个例子, 足以证明,操作系统其实对对话框的位置会按照一定的规则去调整的。
这样,对话框的位置也并不会 出现(100,100)啊。所以我才奇怪,对话框的位置到底是根据什么决定的。为什么对话框的位置无故出现在(0,0)对整个工程搜索:movewindow, setwindowpos,这2个移动位置的函数,代码里并不存在movewindow ,而setwindowpos只有一个地方用到,就是:
SetWindowPos(&wndTopMost,0,0,0,0,SWP_NOSIZE|SWP_NOMOVE|SWP_SHOWWINDOW); 这里用到
对话框本身位置由资源里面设定值决定,而且我怀疑它创建的方式很可能是在(0,0)创建然后移动到指定位置而已,所以这没什么好奇怪的吧
你这么一说,我特意看了资源,发现所有对话框都有相应的参数,确实有起始坐标x,y,而且默认都是(0,0).但是对话框工程运行后,对话框是在中间位置,说明windows强行将对话框移动到中间位置的.以上不是本贴重点.
下面讨论本贴遇到的问题:本帖里的对话框的属性xpos,ypos的值都是0,0,按照 上面的说法,windows 也会强制移动到中间位置。事实上,本帖对话框的位置并非如此。而且 可以确定的是:对话框出现在0,0,绝对不会是我提供的代码setwindowpos导致的。而是 :由于使用了 windowplacement进行隐藏界面,windows此时没有按照常规去强行移动到中间位置。
这恐怕是真实的原因。
在这个项目里,我还遇到另一个小问题:我对托盘进行右键,然后右键后弹出一个pop up菜单,这个菜单只有过一个功能,就是关闭程序。我的问题是,有时候,菜单弹不出来, 有时候能弹出来,很是郁闷。getcursorpos, trackpopupmenu
既然谈到位置, 也说说遇到的一个奇怪问题:在onintdialog 里使用movewindow所遇到的,movewindow(0,0,, 这样,对话框并不会移动到屏幕的0,0处。但是 你只要 movewindow到其他地方,绝对会移过去。 这非常奇怪。为此,我手痒,就将movewindow改成setwindowpos试试,结果setwindowpos 0,0成功了。不知道我表达清楚没movewindow(0,0..)这个用法 似乎不管用的 msdn没有给出说明
MFC的问题吧,估计MFC在调用onintdialog之后会调用CenterWindow
你可以用SDK的方法试试,看看在WM_INITDIALOG MoveWindow管不管用
MFC的问题吧,估计MFC在调用onintdialog之后会调用CenterWindow
你可以用SDK的方法试试,看看在WM_INITDIALOG MoveWindow管不管用是的, sdk成功了INT_PTR CALLBACK MainDlg(HWND hdlg,UINT message ,WPARAM wp,LPARAM lp)
{
switch(message)
{
case WM_INITDIALOG:
MoveWindow(hdlg,50,0,700,800,TRUE);
return 1;
break;
case WM_CLOSE:
EndDialog(hdlg,0);
return 1;
break;
}
return 0;
}