【发布时间】:2014-11-10 11:58:30
【问题描述】:
下面的代码可以正常工作,但是当我将鼠标放在父窗口上并拖动它时,子窗口和父窗口会分开。但是当我放置鼠标并移动它时,我希望子窗口和父窗口一起移动而不是分开。我为子窗口尝试了一些类似 WS_DISABLED 的东西,但没有奏效。请让我知道需要进行哪些修改。我的应用程序不是 MFC。下面是我的代码:
void displayProgressBar()
{
HINSTANCE g_hinst;
if( (g_hinst = GetModuleHandle( L"LoadFunc.dll" )) == NULL )
{
g_hinst = GetModuleHandle( 0 );
}
RECT screenSize;
InitCommonControls();
BOOL rc = SystemParametersInfo( SPI_GETWORKAREA, 0, &screenSize, 0 );
int height = screenSize.bottom / 15;
int width = screenSize.right / 3;
int x = (screenSize.bottom / 2) - (height / 2);
int y = (screenSize.right / 2) - (width / 2);
// create a static window, display a graphic and attach a progress bar to it.
wchar_t currentDir[MAX_PATH];
_wgetcwd( currentDir, _MAX_PATH );
HANDLE img = LoadImage(g_hinst, MAKEINTRESOURCE(IDB_BITMAP1), IMAGE_BITMAP, 0, 0, LR_DEFAULTCOLOR );
//MessageBox(0,L"in",L"out",MB_OK);
hwndParent = CreateWindowEx(WS_EX_DLGMODALFRAME | WS_EX_STATICEDGE,
WC_STATIC,
L"install in progress",
WS_POPUP | WS_VISIBLE | WS_CAPTION | SS_BITMAP,
x,
y,
CW_USEDEFAULT,
CW_USEDEFAULT,
hwndParent,
NULL,
g_hinst,
NULL) ;
EnableWindow(hwndPB,FALSE);
SendMessage(hwndParent, STM_SETIMAGE, IMAGE_BITMAP, (LPARAM)img);
RECT RectControl;
::GetWindowRect( hwndParent, &RectControl );
//MessageBox(0,L"1",L"1",MB_OK);
hwndPB = CreateWindowEx(WS_EX_DLGMODALFRAME | WS_EX_STATICEDGE,
PROGRESS_CLASS,
NULL,
WS_POPUP | WS_VISIBLE,
x + 10, // x
RectControl.bottom - 25, // y
RectControl.right - RectControl.left - 20, // width
20, // height
hwndParent,
(HMENU) 0,
g_hinst,
NULL);
EnableWindow(hwndPB,FALSE);
SendMessage(hwndPB, PBM_SETRANGE, 0,
MAKELPARAM(0, 25));
SendMessage(hwndPB, PBM_SETSTEP, (WPARAM) 2, 0);
}
提前感谢您提供帮助。
【问题讨论】:
-
考虑重命名您的问题:“如何锁定子窗口与其父窗口的相对位置?”
-
如果最后一个问题是您要问的,那么可以在这里找到答案:How to bind child windows to parent window in relative positions?
-
@HuguesFontenelle 感谢您的回复。我们可以根据我的要求对我发布的代码进行任何修改吗?
-
if( (g_hinst = GetModuleHandle( L"LoadFunc.dll" )) == NULL )- 你为什么选择不处理错误?如果未加载所需的模块,则终止应用程序。不要害怕抛出未捕获的异常——它极大地帮助及早发现错误,而不是掩盖它们。 @Hugues:这个问题是关于 Windows API 的。在问题域的上下文中,声称 “父母独立于孩子移动” 是错误的。要么提供事实(文档),要么移除 cmets(强烈推荐后者)。 -
@IInspectable 我认为这是大多数 gui 中的默认设置,但我并不精通 windows API,所以我删除了评论。
标签: winapi visual-c++