如何使非模态窗口与主窗口一起移动

simonks2016 2014-06-10 03:09:12
本人写了一个程序,里面有一个Tab控件,控件创建一个非模态窗口,但是主窗口只要一移动,非模态窗口就不跟着移动。怎样才能使非模态窗口跟着主窗口一起移动。新手跪求高手解答!



#include <Windows.h>
#include "resource.h"
#include "commctrl.h"

HWND htab;
RECT rect;
HWND hTabDialog;
HINSTANCE hInst;
BOOL WINAPI TabDialog(HWND ,UINT,WPARAM,LPARAM);

INT_PTR CALLBACK MainPrco(HWND hDlg,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
BOOL MRECT = true;
LPSTR pTextName [3] = {"登记","查询","注销"};
RECT crect;
switch(uMsg)
{
case WM_INITDIALOG: //指窗口创建之后,对控件进行创建!与WM_CREATE一样
TCITEM tem;
htab=GetDlgItem(hDlg,IDC_TAB);
tem.mask = TCIF_TEXT | TCIF_STATE ;
/*tem.iImage = -1 ;*/
for(int i=0;i<3;i++)
{
tem.pszText = pTextName[i];
TabCtrl_InsertItem(htab,i,&tem);
}
GetClientRect(htab,&rect);
hTabDialog =CreateDialog(hInst,MAKEINTRESOURCE(IDD_TabDialog1),htab,TabDialog);
/*MoveWindow(hTabDialog,35,80,665,225,true);*/
GetClientRect(htab,&crect);
MoveWindow(hTabDialog,35,80,crect.right-crect.left,crect.bottom-crect.top,true);
ShowWindow(hTabDialog,SW_SHOW);


break;
case WM_MOVE:

break;
case WM_NOTIFY:

break;
case WM_COMMAND:

break;
case WM_CLOSE:
EndDialog(hDlg,0);
break;
default:
MRECT = false;
break;

}
return MRECT;
}

int WINAPI WinMain(HINSTANCE hInst,HINSTANCE hprevInstance,LPSTR lpszCmdLine,int nCmdShow)
{
DialogBox(hInst,MAKEINTRESOURCE(IDD_MAIN),NULL,MainPrco);

}

BOOL WINAPI TabDialog(HWND hwnd ,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
int WMID;
BOOL Treturn = true;
WMID =wParam;
switch(uMsg)
{
case WM_SYSCOMMAND:

break;
case WM_COMMAND:
break;
default:
return Treturn= false;

}
return Treturn;
}
...全文
215 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
simonks2016 2014-07-02
  • 打赏
  • 举报
回复
感谢以上的回答,小弟从中得到启发,已经搞定啊!谢谢!!
schlafenhamster 2014-06-12
  • 打赏
  • 举报
回复
"一个Tab控件,控件创建一个非模态窗口," 为什么 非模态 ? 用 模态 就行了。
幻夢之葉 2014-06-12
  • 打赏
  • 举报
回复
SetWindowPos MoveWindow 你移动主窗口的同时,对子窗口进行移动,移动的距离及方向一致! 注意边界时的判断和移动操作。
mwp 2014-06-12
  • 打赏
  • 举报
回复
首先你自己给自己找了麻烦,如果你建MFC的工程或C#的工程实现起来会容易的多,你现在是win32工程也能实现,思路就是处理主窗口的WM_WINDOWPOSCHANGED消息,对 非模式窗口SetWindowPos,移动非模式窗口, MSDN对WM_WINDOWPOSCHANGED的参数有如下描述 The WINDOWPOS structure contains information about the size and position of a window. typedef struct tagWINDOWPOS { /* wp */ HWND hwnd; HWND hwndInsertAfter; int x; int y; int cx; int cy; UINT flags; } WINDOWPOS;
simonks2016 2014-06-11
  • 打赏
  • 举报
回复
跪求大神解答。。。。。!

65,210

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧