HWND hParent = ::GetParent(m_hWnd);//无法获取chlid风格对话框的句柄咋办?

mirroatl170 2013-01-11 11:00:49

自绘菜单把chlid风格的对话框认父窗口

bool CWndPopup::SendMessage(UINT Msg, WPARAM wParam, LPARAM lParam)
{
HWND hParent = ::GetParent(m_hWnd);
if (hParent)
{
::PostMessage(hParent, Msg, wParam, lParam);//发送自定义信息收不到。
return true;
}
return false;
}

//创建没问题吧????
BOOL CWndPopup::Create(CWnd *pParent, CRect rc, UINT uMessageID)
{
CString sWindowClassName = AfxRegisterWndClass(CS_DBLCLKS,::LoadCursor(NULL, IDC_ARROW));

m_uMessageID = uMessageID;
m_point.x = rc.left;
m_point.y = rc.top;

if(CWnd::CreateEx(WS_EX_TOPMOST | WS_EX_TOOLWINDOW,sWindowClassName ,NULL,WS_POPUP, rc, pParent, 0, NULL))
{
return FALSE;
}

return TRUE;
}
...全文
549 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
邓学彬 2013-01-12
  • 打赏
  • 举报
回复
HWND hParent = ::GetWindow(m_hWnd, GW_OWNER); 这个是正解
gfm688 2013-01-12
  • 打赏
  • 举报
回复
::GetParent(m_hWnd); 这个m_hWnd不能是WS_POPUP风格 GetOwner 试试

bool CWndPopup::SendMessage(UINT Msg, WPARAM wParam, LPARAM lParam)
{
    HWND hParent = ::GetWindow(m_hWnd, GW_OWNER);
    if (hParent)
    {
        ::PostMessage(hParent, Msg, wParam, lParam);//发送自定义信息收不到。
        return true;
    }
    return false;
}
Li_Carey 2013-01-12
  • 打赏
  • 举报
回复
把WS_POPUP改为WS_CHILD试试...
gfm688 2013-01-12
  • 打赏
  • 举报
回复

public:
  CWnd *m_pParent; //给CWndPopup加个成员变量

BOOL CWndPopup::Create(CWnd *pParent, CRect rc, UINT uMessageID)
{
    CString sWindowClassName = AfxRegisterWndClass(CS_DBLCLKS,::LoadCursor(NULL, IDC_ARROW));
 
    m_uMessageID = uMessageID;
    m_point.x = rc.left;
    m_point.y = rc.top;
 
    if(CWnd::CreateEx(WS_EX_TOPMOST | WS_EX_TOOLWINDOW,sWindowClassName ,NULL,WS_POPUP, rc, pParent, 0, NULL)) //Nonzero if successful
    {
      m_pParent = pParent;
      return FALSE;
    }
 
    return TRUE;
}

bool CWndPopup::SendMessage(UINT Msg, WPARAM wParam, LPARAM lParam)
{
    if (m_pParent)
    {
        m_pParent->PostMessage(Msg, wParam, lParam);
        return true;
    }
    return false;
}

schlafenhamster 2013-01-12
  • 打赏
  • 举报
回复
extern Page *pWnd 那么 Page *pWnd 的 定义 和 初始化一定在 别的 地方。 而且 一定 是 全局 变量,不在 如何 类 中。 一般 不这么做, 因为对象 有个 生命期 问题,这个 全局变量 与 实际的 对象 可能 会 脱离 关系, 除非 你 不断 给他 赋值
圆道 2013-01-12
  • 打赏
  • 举报
回复
要搞明白层次关系,再用GetParent 如果是3层就得2个
mirroatl170 2013-01-12
  • 打赏
  • 举报
回复

这个情况

引用 4 楼 gfm688 的回复:
::GetParent(m_hWnd);
这个m_hWnd不能是WS_POPUP风格
GetOwner 试试



C/C++ code
?



1234567891011

bool CWndPopup::SendMessage(UINT Msg, WPARAM wParam, LPARAM lParam) { HWND hParent = ::GetWind……
mirroatl170 2013-01-12
  • 打赏
  • 举报
回复
还是不行。。。。。
引用 4 楼 gfm688 的回复:
::GetParent(m_hWnd); 这个m_hWnd不能是WS_POPUP风格 GetOwner 试试 C/C++ code ? 1234567891011 bool CWndPopup::SendMessage(UINT Msg, WPARAM wParam, LPARAM lParam) { HWND hParent = ::GetWind……
mirroatl178 2013-01-11
  • 打赏
  • 举报
回复
child对话框上取不到啊
引用 2 楼 hurryboylqs 的回复:
那里取不到?
hurryboylqs 2013-01-11
  • 打赏
  • 举报
回复
那里取不到?
mirroatl170 2013-01-11
  • 打赏
  • 举报
回复

//这种风格是啥吧?
int CWndPopup::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
	// 设置窗口风格
	DWORD dwStyle = ::GetWindowLong(m_hWnd, GWL_STYLE)
		| WS_SIZEBOX | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | WS_EX_LAYERED;
	dwStyle &= ~(WS_CAPTION);

	::SetWindowLong(m_hWnd, GWL_STYLE, dwStyle);
	::SetWindowLong(m_hWnd,GWL_EXSTYLE, WS_EX_TOOLWINDOW); 

 	InitUI();
 	DrawWindow();

	SetWindowPos(NULL, m_point.x, m_point.y, 100, 100, SWP_SHOWWINDOW|SWP_NOSIZE);
	return TRUE;
}

15,978

社区成员

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

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