如何让整个对话框在整个操作过程中都没有焦点啊?

jfzsl 2005-11-03 04:37:38
我有一个基于对话框的界面。当前上面有一个EDIT,三个Button,想让整个操作过程中都不要焦点(比如,当鼠标按在某个按钮上的时候在EDIT中输入某些数据,但不要焦点在这个button上。当鼠标点击在EDIT中的时候,也不要有一个焦点提示输入。没有明白的大侠可以打开微软拼音输入的软键盘看看,他就是整个操作过程没有焦点的)。请问如何实现?
谢谢大家!
...全文
224 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
jfzsl 2005-11-10
  • 打赏
  • 举报
回复
KAO,CSDN又搞了一个什么狗屁名堂?结贴都结不了,给分都没有办法给!
结贴给完分后提示: 贴子回复次数大于跟给分次数
什么东东啊?
如何才能结贴呢?
jfzsl 2005-11-10
  • 打赏
  • 举报
回复
谢谢各位的回答,现在结贴!
BOYGUARD110 2005-11-04
  • 打赏
  • 举报
回复
比如,自画按钮

彩色按钮源代码 详细信息 < 按钮 >
[代码性质] VC可重用代码段
[代码作者] Bob Ryan
[文件大小] 2K
[更新日期] 2002-3-9 12:06:00
[下载次数] 7740

http://www.vckbase.net/code/listcode.asp?mclsid=3&sclsid=&page=27



其中的自画部分如下:

看作者的注释知道

当if (state & ODS_FOCUS) 的时候

是可以把虚线画出来表示此时拥有焦点,那么你可以不画,不就没了

EDIT窗口你再找找相关的源代码,应该会有些线索,


void CColorButton::DrawItem(LPDRAWITEMSTRUCT lpDIS)
{
//
// Now, depending upon the state, redraw the button (down image) if it is selected,
// place a focus rectangle on it, or redisplay the caption if it is disabled
//
if (state & ODS_FOCUS)
{
DrawFocusRect(lpDIS->hDC, (LPRECT)&focusRect);
if (state & ODS_SELECTED){
DrawFilledRect(pDC, btnRect, GetBGColor());
DrawFrame(pDC, btnRect, -1);
DrawButtonText(pDC, btnRect, buffer, GetFGColor());
DrawFocusRect(lpDIS->hDC, (LPRECT)&focusRect);
}
}

}
}
jfzsl 2005-11-04
  • 打赏
  • 举报
回复
TO: BOYGUARD110(BOYGUARD110)

没有明白。具体如何来作,给些提示!

有没有更好一点的办法呢?
BOYGUARD110 2005-11-03
  • 打赏
  • 举报
回复

1.自画这些控件,不显示虚线

2. 微软的输入法软件盘窗口整个可能是自画的一个窗口对象
jfzsl 2005-11-03
  • 打赏
  • 举报
回复
好的,谢谢!
快乐鹦鹉 2005-11-03
  • 打赏
  • 举报
回复
那就是想办法截获WM_SETFOCUS消息,不过我也不知道怎么才能截获。。。。。。
lixiaosan 2005-11-03
  • 打赏
  • 举报
回复
?
TO: lixiaosan(小三)
这样替换到别的程序光标闪烁还是我们设置的,好像又要切换回去了。


===================================

你的疑问,我上面已有解答。。。
jfzsl 2005-11-03
  • 打赏
  • 举报
回复
TO: lixiaosan(小三)
这样替换到别的程序光标闪烁还是我们设置的,好像又要切换回去了。
jfzsl 2005-11-03
  • 打赏
  • 举报
回复
TO: happyparrot(快乐鹦鹉)
这个方法我也试过,点击一个按钮后,然后用隐藏按钮的SetFocus(),这样就要对每个按钮处理。如果按钮多的话就不好处理了吧?
有没有更好的办法?
lixiaosan 2005-11-03
  • 打赏
  • 举报
回复
if( GetForegroundWindow() == this->m_hWnd)
lixiaosan 2005-11-03
  • 打赏
  • 举报
回复
GetForegroundWindow()


你可以弄个定时器Timer,判断是否你的dlg为桌面上的顶层窗口,是才设定新的时间间隔
Cxxxdlg::OnTimer(....)
{
if( GetForegroundWindow() == this.m_hWnd)
SetCaretBlinkTime(uiNewTime);
else
SetCaretBlinkTime(uiOldTime);

.....

}
lixiaosan 2005-11-03
  • 打赏
  • 举报
回复
你可以判断当前界面为顶层界面时才SetCaretBlinkTime
lixiaosan 2005-11-03
  • 打赏
  • 举报
回复
会影响到其他程序,因为这个是api是设置系统的光标闪烁速度
快乐鹦鹉 2005-11-03
  • 打赏
  • 举报
回复
响应按钮的OnClick,最后调用隐藏按钮的SetFocus()
响应edit控件的OnChange,最后调用隐藏按钮的SetFocus()
总之,最后都将焦点设置到隐藏按钮上。隐藏按钮不可见。
jfzsl 2005-11-03
  • 打赏
  • 举报
回复
TO: lixiaosan(小三)
这样程序替换到别的界面会出问题吗?
lixiaosan 2005-11-03
  • 打赏
  • 举报
回复
试试通过控制光标的闪烁速度。。(即设置闪烁间隔时间足够长)

在程序结束后,记得恢复光标速度

UINT uiOldTime, uiNewTime;
uiOldTime = GetCaretBlinkTime();


....

SetCaretBlinkTime(uiNewTime);


在关闭程序时,设置会系统光标速度
SetCaretBlinkTime(uiOldTime);
dingpiao 2005-11-03
  • 打赏
  • 举报
回复
楼上的好主意
jfzsl 2005-11-03
  • 打赏
  • 举报
回复
TO: happyparrot(快乐鹦鹉)
具体一点啊。
这个控件如何做?
快乐鹦鹉 2005-11-03
  • 打赏
  • 举报
回复
做个隐藏的控件。把焦点都设置到这个控件上。

15,979

社区成员

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

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