下面的代码工作正常但是当我将鼠标放在父窗口上并拖动它时,子窗口和父窗口会被分开。但是当我放置鼠标并移动它时,我希望孩子和父窗口一起移动而不会分开。我为子窗口尝试了一些像WS_DISABLED这样的东西,但它没有用。请告诉我需要做哪些修改。我的应用程序是非MFC.Below是我的代码:
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);
}
提前感谢您提供帮助。
答案 0 :(得分:1)
CreateWindowEx的hMenu
参数已重载,具有两个不同的含义,具体取决于dwStyle
参数。以下是文档中的重要信息:
对于重叠或弹出窗口, hMenu 标识要与窗口一起使用的菜单。
对于子窗口, hMenu 指定子窗口标识符。
如果要使用班级菜单,则允许传递NULL
重叠或弹出窗口。另一方面,不允许为子窗口传递0
:0不是有效的控件标识符。 (这没有明确说明,但可以从GetDlgCtrlID和GetWindowLongPtr [GWLP_ID]返回0表示错误的事实中轻易推断出来。)
要解决您的问题,您必须应用两项更改:指定WS_CHILD
窗口样式,并指定有效的子窗口ID:
hwndPB = CreateWindowEx(WS_EX_STATICEDGE,
PROGRESS_CLASS,
NULL,
WS_CHILD | WS_VISIBLE,
x + 10, // x
RectControl.bottom - 25, // y
RectControl.right - RectControl.left - 20, // width
20, // height
hwndParent,
(HMENU) 1, // child-window identifier; this is usually defined as a named
// constant in Resource.h
g_hinst,
NULL);
答案 1 :(得分:-1)
也许你需要为hwndPB设置WS_CHILD样式... WS_POPUP意味着“子”窗口只是禁用父节点,它们不会一起移动。
BTW,“非MFC”也称为Win32应用程序。