制作ActiveX 控件问题?

leibo_80 2007-09-08 11:38:59
自定义了一个FireTextChange事件,控件里有Ontextchange()消息响应函数,但翻遍了却没找到相应的消息映射,用哪种消息映射触发这个自定义的事件函数.

WM_TIMER和WM_KEYDOWN消息映射都试过,效果都不理想.

请高手赐教.
...全文
140 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
leibo_80 2007-09-10
  • 打赏
  • 举报
回复
这里不能传图片.

能到我的私人论坛来讨论吗?

谢谢!

http://youngman.uu1001.com/read.php?tid=4
dyw 2007-09-10
  • 打赏
  • 举报
回复
CString m_text; // 假定

在WM_CHAR消息中,

m_text += <WM_CHAR消息字符>; // 可能需要处理Backspace键
FireTextChanged();
dyw 2007-09-10
  • 打赏
  • 举报
回复
WM_CHAR只能响应键盘,其他输入设备在其产生的事件里处理。

VB属性页找找例子看
leibo_80 2007-09-10
  • 打赏
  • 举报
回复
WM_CHAR是不是只能响应键盘?如果用其他输入设备呢?

还有自定义控件属性页在VB可视属性框怎么显示.(就是VB左边那排属性窗口)
dyw 2007-09-09
  • 打赏
  • 举报
回复
http://msdn2.microsoft.com/en-us/library/d3b8fw6t(VS.80).aspx
leibo_80 2007-09-09
  • 打赏
  • 举报
回复
我用WM_CHAR和WM_KEYDOWN

用VB

form1.caption = my231.text

form1.caption 和 my231.text总有一个字符的误差.
dyw 2007-09-09
  • 打赏
  • 举报
回复
WM_CHAR和WM_KEYDOWN一样的,很滞后
-----------
键盘消息应该是最实时的,怎么会滞后呢?这是一种同步处理。

Timer也是可靠的,其工作方式可以理解为是异步的。

OnTimer与OnTextChanged有些代码是一样的,可以略简化一下:
if(m_text != GetText())
{
m_text=GetText();
leibo_80 2007-09-09
  • 打赏
  • 举报
回复
WM_CHAR和WM_KEYDOWN一样的,很滞后.

哎,没法,还是用WM_TIMER,但是老感觉WM_TIMER不可靠,所以想找个合适的消息映射.
谢谢你.

你看看我的TIMER还有什么要补充的吗?


void CMy23Ctrl::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
if(nIDEvent == 1)
if(m_text != GetText())
{
m_text=GetText();
this->OnTextChanged();
}
COleControl::OnTimer(nIDEvent);
}

dyw 2007-09-09
  • 打赏
  • 举报
回复
WM_CHAR
leibo_80 2007-09-09
  • 打赏
  • 举报
回复
void CMy23Ctrl::OnTextChanged()
{
// TODO: Add your specialized code here and/or call the base clas
if(m_text != GetText())
{
m_text=GetText();
FireTextChange();
InvalidateControl();
SetModifiedFlag();
}
COleControl::OnTextChanged();
}
leibo_80 2007-09-09
  • 打赏
  • 举报
回复
[id(1)] void TextChange();

WM_KEYUP如果键按住不放,没有触发OnTextChange().

我在类向导中没有找到WM_LOSTFOCUS.

还有什么消息能替代EN_CHANGE吗?

我只是想做个三位一体的编译文本框控件,这几天愁死了,真想知道微软大哥的文本框控件EN_CHANGE是什么触发的.
dyw 2007-09-09
  • 打赏
  • 举报
回复
问题在于你的FireTextChange的触发条件是怎么定义的:
——如果是只要文本变更就马上通知,那就用WM_KEYUP消息。这个跟编辑框的EN_CHANGE类似。
——如果是失去焦点时触发,就使用WM_LOSTFOCUS
leibo_80 2007-09-09
  • 打赏
  • 举报
回复
MSDN的这些我都看过.

现在关键是文本框控件有EN_CHANGE消息映射,而自定义文本框用什么映射OnTextChange()函数哦.

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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