一个窗口的两个子窗口的前后顺序反了,求助

yongziqd 2012-07-31 01:48:39
我在一个父窗口底下创建了两个子窗口,这两个子窗口有重叠部分.
后创建的子窗口反而被刚开始创建的子窗口覆盖了.
但是鼠标点覆盖部分,选中并移动的是后创建的那个窗口,也就是被覆盖的那个窗口.
不知道这是怎么回事,求助.
...全文
104 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
向立天 2013-03-11
  • 打赏
  • 举报
回复
您好 我是本版版主 此帖已多日无人关注 请您及时结帖 如您认为问题没有解决可按无满意结帖处理 另外本版设置了疑难问题汇总帖 并已在版面置顶 相关规定其帖子中有说明 您可以根据规定提交您帖子的链接 如您目前不想结帖只需回帖说明 我们会删除此结帖通知 见此回复三日内无回应 我们将强制结帖 相关规定详见界面界面版关于版主结帖工作的具体办法
yongziqd 2012-07-31
  • 打赏
  • 举报
回复
求高手关注,别沉了
yongziqd 2012-07-31
  • 打赏
  • 举报
回复

LRESULT WINAPI MainWndProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam )
{
static POINT mousedown;
static POINT mouseup;
switch( msg )
{
case WM_MOVE:
{
RECT rc;
::GetClientRect(hWnd,&rc);
InvalidateRect(hWnd,&rc,TRUE);
SendMessage(hWnd,WM_NCPAINT,1,0);
}
break;
case WM_RBUTTONDOWN:
{
HMENU hResourceMenu,hPopupMenu;
POINT mousePos;
RECT rcClient;

GetClientRect(hWnd,&rcClient);
mousePos.x=LOWORD(lParam);
mousePos.y=HIWORD(lParam);
if(!PtInRect(&rcClient,mousePos))
return FALSE;

HINSTANCE hInstance = (HINSTANCE) GetWindowLong( hWnd, GWL_HINSTANCE );
hResourceMenu=LoadMenuA(hInstance,"MYMENU1");
if(!hResourceMenu)
return FALSE;

hPopupMenu=GetSubMenu(hResourceMenu,0);

ClientToScreen(hWnd,&mousePos);

TrackPopupMenu(hPopupMenu,TPM_LEFTALIGN/TPM_RIGHTBUTTON,
mousePos.x,mousePos.y,0,hWnd,NULL);

DestroyMenu(hResourceMenu);
}
break;
case WM_LBUTTONDOWN:
{
mousedown.x = LOWORD(lParam);
mousedown.y = HIWORD(lParam);
//SetCapture(hWnd);
ReleaseCapture();
PostMessage(hWnd,WM_SYSCOMMAND, SC_MOVE | HTCAPTION, 0);
}
break;
case WM_LBUTTONUP:
{
RECT rect;
::GetClientRect(hWnd, &rect);
InvalidateRect(hWnd, &rect, TRUE);
}
break;
case WM_MOUSEMOVE:
{
POINT mousePos;
RECT rcClient;

GetClientRect(hWnd,&rcClient);
mousePos.x=LOWORD(lParam);
mousePos.y=HIWORD(lParam);
if(!PtInRect(&rcClient,mousePos))
return FALSE;
SetCursor(::LoadCursor(NULL, IDC_ARROW));
}
break;
case WM_COMMAND:
switch(wParam){
}
break;
case WM_PAINT:
{
PAINTSTRUCT ps;
HDC hdc = BeginPaint (hWnd, &ps);
RECT rect;
::GetClientRect(hWnd,&rect);
SetBkMode(hdc, TRANSPARENT);
//设置窗口半透明
{
static HDC hBitmapDC;
static HBITMAP hBitmap;
static BLENDFUNCTION bf;
static int w=GetSystemMetrics(SM_CXSCREEN);
static int h=GetSystemMetrics(SM_CYSCREEN);
static HBRUSH hBrush = CreateSolidBrush(RGB(128,255,128));
hBitmapDC = CreateCompatibleDC(hdc);
hBitmap = CreateCompatibleBitmap(GetDC(GetParent(hWnd)),w,h);
SelectObject(hBitmapDC,hBitmap);
FillRect(hBitmapDC, &rect, hBrush);

bf.BlendOp = AC_SRC_OVER;
bf.BlendFlags = 0;
bf.AlphaFormat = 0;
bf.SourceConstantAlpha = 200;

AlphaBlend(hdc,0,0,w,h,hBitmapDC,0,0,w,h,bf);

DeleteObject(hBitmap);
::DeleteDC(hBitmapDC);
}
EndPaint (hWnd, &ps);
}
return 0;
case WM_DESTROY:
//PostQuitMessage( 0 );
PostMessage(hWnd, WM_CLOSE, 0, 0);
return 0;
}

return DefWindowProc( hWnd, msg, wParam, lParam );
}

以上是子窗口的响应函数
yongziqd 2012-07-31
  • 打赏
  • 举报
回复
HWND hWnd;
hWnd = CreateWindowEx(
WS_EX_TOOLWINDOW,
"VideoClient",
"", //NAME,
WS_CHILD|WS_THICKFRAME,//WS_CLIPSIBLINGS, //WS_OVERLAPPEDWINDOW, //WS_POPUP|WS_SYSMENU,
pos.left,
pos.top,
pos.right-pos.left,
pos.bottom-pos.top,
hParentWnd,
NULL,
GetInstance(),
NULL );

ShowWindow(hWnd, SW_SHOW);
UpdateWindow(hWnd);
SetWindowPos(hWnd, HWND_TOP, pos.left,
pos.top,
pos.right-pos.left,
pos.bottom-pos.top, SWP_SHOWWINDOW);
::SetFocus(hWnd);
以上是创建子窗口的代码

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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