求助,在线等,谢谢,关于鼠标进入对话框的问题。

ke2007lin 2008-01-03 03:09:10
谢谢,请问一下

类似QQ宠物的那样喂养按键栏是怎么实现的呢?

就是,鼠标指针进入对话框内,然后就出现一排按键,鼠标离开后那一排按键就自动消失

这个是怎么实现的呢?谢谢指教

是用Dialog还是Toolbar,或在其他的东西呢?

试过好多方法了,都不行。谢谢指教。
...全文
209 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
shaxing 2008-01-04
  • 打赏
  • 举报
回复
不知道LZ解决了没?
这样就不闪了。
闪是因为不停的
dlg.Create(IDD_FUNDLG);
dlg.ShowWindow(SW_SHOWNORMAL);

具体的功能自己实现吧

void CQQDlg::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
CRect rect;
GetClientRect( &rect );
if ( rect.PtInRect( point ) || GetCapture() != this )
{
SetCapture();
if ( !m_dlg.m_hWnd )
{
m_dlg.Create( IDD_NEWDLG );
m_dlg.ShowWindow( SW_SHOW );
}

}
else
{
ReleaseCapture();
if ( m_dlg.m_hWnd )
{
m_dlg.ShowWindow( SW_HIDE );
m_dlg.DestroyWindow();
}


}


CDialog::OnMouseMove(nFlags, point);
}


ke2007lin 2008-01-04
  • 打赏
  • 举报
回复
先给分结贴,问题还没解决,继续开新帖子求助
ke2007lin 2008-01-03
  • 打赏
  • 举报
回复
QQ宠物是flash,但是还是有编程的吧?

回:jinghao666666

重绘一直闪,那有没有方法解决那?

还有楼上的兄弟,缓存弄大概的步骤怎么样的呢?

谢谢了
asa5880 2008-01-03
  • 打赏
  • 举报
回复
如果用DC来做怕闪就用缓存好了
asa5880 2008-01-03
  • 打赏
  • 举报
回复
QQ宏物好像是FALSH吧,不过用VC也可以,纯粹是事件绘图
Torch009 2008-01-03
  • 打赏
  • 举报
回复
重绘当然会一直闪了
ke2007lin 2008-01-03
  • 打赏
  • 举报
回复
我用Menu就没事,奇怪。

Menu的就是替换了Dialog那块就可以用的。晕倒,是不是要用ShowWindow的其他SM?
ke2007lin 2008-01-03
  • 打赏
  • 举报
回复
哈哈,试过很多种方法了。

然后最终选定用OnMousMove

还是不行。是不是Dialog不能那样用啊?
jwybobo2007 2008-01-03
  • 打赏
  • 举报
回复
试试楼上的,我觉得应该是个小问题,楼主应该能解决.
shakaqrj 2008-01-03
  • 打赏
  • 举报
回复
if ((!m_MOverControl||GetCapture()!=this)&&m_MOverControl==false)
{

m_MOverControl=true;
BOOL ret=dlg.Create(IDD_FUNDLG,this);
if (!ret)
{
AfxMessageBox(L"Error creating Dialog");
}
dlg.ShowWindow(SW_SHOW|);
dlg.ShowWindowInt(900,52);
SetCapture();
}
else
{
//鼠标离开
if (!Mrect.PtInRect(point))
{
m_MOverControl=false;

ReleaseCapture();
}
}
ke2007lin 2008-01-03
  • 打赏
  • 举报
回复
回:shakaqrj

那个m_MOverControl就是那个判断变量
wy2001wy 2008-01-03
  • 打赏
  • 举报
回复
还真没看出闪的原因.
ke2007lin 2008-01-03
  • 打赏
  • 举报
回复
哈,好像不行。大概可以用什么方法限制呢?

鼠标在区域内Debug窗口输出这样的东东:
First-chance exception at 0x7c812a7b in QuickBar.exe: 0x000006EF: 在远程过程调用时,将空的上下文句柄从客户端传递到主机。.
First-chance exception at 0x7c812a7b in QuickBar.exe: 0x000006A6: 绑定句柄无效。.
First-chance exception at 0x7c812a7b in QuickBar.exe: 0x000006B5: 接口未知。.
First-chance exception at 0x7c812a7b in QuickBar.exe: 0x000006EF: 在远程过程调用时,将空的上下文句柄从客户端传递到主机。.
First-chance exception at 0x7c812a7b in QuickBar.exe: 0x000006A6: 绑定句柄无效。

会不会跟这个有关呢?
shakaqrj 2008-01-03
  • 打赏
  • 举报
回复
bool flag=false
进入对话框时
if(flag==false){
显示
flag=true
}
离开{
隐藏
flag=false
}
大概这样,或许考虑还不周到,试试看
m_MOverControl貌似这个变量就可以
ke2007lin 2008-01-03
  • 打赏
  • 举报
回复
哦,好的,我先试试一下
jwybobo2007 2008-01-03
  • 打赏
  • 举报
回复
showwindow一次就可以了,你这样写会造成不断的执行showwindow,加个判断好了,如果刚进入并且鼠标没有离开则执行showwindow,如果已经进入,并且始终未离开则不需要showwindow
ke2007lin 2008-01-03
  • 打赏
  • 举报
回复
嗯,我想也是。

不过怎么弄呢?我还是没找出来怎么解决这个问题。

dlg.ShowWindowInt(900,52);
这个是我写的设置Window的位置的一个函数。
shakaqrj 2008-01-03
  • 打赏
  • 举报
回复
会不会是因为showwindow很多次的原因,因为一直在对话框内,因此一直不停的show
设一个变量,让其进去出来只showwindow一次
ke2007lin 2008-01-03
  • 打赏
  • 举报
回复
这个是我试写的代码。
已经有判断了,还没响应隐藏,这个代码就是会一直闪烁。

void CQuickBarDlg::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default

CRect Mrect;
GetWindowRect(&Mrect);
CFunDLG dlg;

//鼠标进入bar
if (!m_MOverControl||GetCapture()!=this)
{
m_MOverControl=true;
BOOL ret=dlg.Create(IDD_FUNDLG,this);
if (!ret)
{
AfxMessageBox(L"Error creating Dialog");
}
dlg.ShowWindow(SW_SHOW|);
dlg.ShowWindowInt(900,52);
SetCapture();
}
else
{
//鼠标离开
if (!Mrect.PtInRect(point))
{
m_MOverControl=false;

ReleaseCapture();
}
}

CDialog::OnMouseMove(nFlags, point);
}
jwybobo2007 2008-01-03
  • 打赏
  • 举报
回复
判断鼠标的位置,如果一直处与里面则不隐藏Dialog,如果不是则隐藏
加载更多回复(2)

15,978

社区成员

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

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