• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >vc/mfc > WTL初学请教个问题

WTL初学请教个问题

作者:佚名 字体:[增加 减小] 来源:互联网 时间:2017-06-04

佚名通过本文主要向大家介绍了wtl,wtl是什么意思,wtl 代理商哪家好,wtl 7019 gly2,wtl design等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: WTL初学请教个问题
描述:

各位高手:
    小弟刚学WTL。有一点MFC基础。今天看一教程时遇到一个问题使终没想明白特来请教,希望有高手指点一二。
我在工具条ToolBar上新添了一个按钮并在框架类中添加代码响应点击按钮:当点击按钮时改变视图窗口背影色。
LRESULT CMainFrame::OnToolBarBtn1Click(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
{
        m_view.PostMessageW(WM_ERASEBKGND);
return 0;
}
然后在视图窗口类中增加对WM_ERASEBKGND消息响应的事件处理

LRESULT CMyFirstWTLView::OnEraseBkgnd(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/)
{
CPaintDC dc(m_hWnd);
//TODO: Add your drawing code here
        //测试消息是否响应
       ::MessageBox(m_hWnd,_T("I've called"),_T("Test"),MB_OK);
return 0;
}

可是我发现程序执行后并没有得到我预期的结果。。。
而我更换了主框架类中按钮点击事件的处理代码后:
LRESULT CMainFrame::OnToolBarBtn1Click(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
{
RECT rcClient;
        m_view.GetClientRect( &rcClient );
m_view.RedrawWindow(&rcClient,NULL,RDW_INVALIDATE | RDW_UPDATENOW | RDW_ERASE);
       
return 0;
}

程序执行却又正确。这是为什么啊?为什么直接发送消息并没有得到处理。请高手指点。。。不甚感谢


解决方案1:

要用sendmessage。
消息是可以被处理的。
你看看你是不是忘了添加消息宏了。 onmessage。宏是否正确
新手经常犯这样的错误。
或者你需要先创建view窗口。 

解决方案2:

WM_ERASEBKGND消息是系统的通知消息,不可以直接来发送
RedrawWindow是重绘窗口,系统会自动刷新背景,也就是会相应你定义的消息函数。

解决方案3:

m_view.PostMessageW(WM_ERASEBKGND); 
用SendMessage()试试,PostMessageW有可能消息没有处理完就返回了
SendMessage会等消息处理完才返回。

解决方案4:

1,用Messagebox太笨重,想获取运行状态,可以下个DebugView,而后ATLTRACE();
2,PreTranlateMessage,是WTL的一种消息过滤机制,由于你的消息循环是WTL写的,WTL能确保处理message queue中的每个消息前都会call这个函数,如果你的postmessage成功了,那么这个函数一定会先被call到,可以ATLTRACE一下。

解决方案5:

直接,发送是没有问题,您仔细看看代码.
如果


LRESULT CMyFirstWTLView::OnEraseBkgnd(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/)
{
    CPaintDC dc(m_hWnd);
    //TODO: Add your drawing code here
        //测试消息是否响应
       ::MessageBox(m_hWnd,_T("I've called"),_T("Test"),MB_OK);
    return 0;
}

程序应当在一进行就会出现对话框,那还需要你点工具条啊
也就是说你的OnEraseBkgnd消息都没有来
有几种可能性
1.您没有定义宏
2.消息在前面就被处理了,还没有到这儿来.

解决方案6:

重载这个函数:

BOOL CMainFrame::PreTranlateMessage(MSG* pMsg)
{
   if( m_view.PreTranlateMessage(pMsg ) return TRUE;
   return TRUE;
}

解决方案7:

直接发消息是可以的,参数WPARAM wParam,   // handle to device context (HDC)
没有设定, 一般情况下,你不需要手工发消息, 况且还得自已创建/释放这个窗口DC,
用RedrawWindow或Invalidate重绘窗口即可. 


分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 看了一下WTL,对这个代码看不懂
  • 要用atl写个控件,涉及到界面的,怎么将wtl和atl结合起来用呐?用wtl来做控件的界面
  • 在ATL中使用WTL中的CFileDialog实现预览功能出现的不刷新问题,高手进
  • 使用WTL库,编译提示“cannotopenincludefile"atlresh"”,这是怎么回事?
  • WTL能否用于ATL做COM组件的界面?需要注意什么?
  • WTL中,怎么改变lineto画线的颜色和粗细?
  • WTL问题,MainFrame加一个Destory响应怎么会这样
  • 请大家帮忙看看这个:关于wtl
  • WTL,CCodePageCombo继承CComboBoxT<ATL::CWindow>类,需要响应下拉菜单CloseUp的消息
  • WTL下如何添加Mediaplayer控件

相关文章

  • 2017-06-04 如何传递一个结构体从VCCOM组件-〉NETVB程序???
  • 2017-06-05 大神帮忙,网页中文字符处理问题,着急着急!!!
  • 2017-06-04 从代理存根那章开始迷糊了
  • 2017-06-04 求救:为ActiveMovie控件映射成员变量出现未定义错误
  • 2017-06-05 高分求救,关于句柄的关闭
  • 2017-06-05 谁VS2008中调试过微软提供的SampleAtlButton?
  • 2017-06-04 有没有人用过mapobjectocx和legendocx的,有个问题?
  • 2017-06-05 请教高手:windows是如何响应网络文件访问的?(分值不够啦,所以只能30啦)
  • 2017-06-04 ATL支持MFC的问题,很简单的问题大家来看一下吧!!
  • 2017-06-04 如何在BHO中栏截onsubmit

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 一个很奇怪很不好描述的问题,请大家帮忙。
    • 怎样突破waitformultipleObjects64个限制的问题
    • 已有数据导入到Excel中,如何在这个Excel中增加新的数据行呢
    • 求教:关于VC6下的WebServices的应用
    • IE中Activex控件闪烁的问题。(解决还有100分,up者有分)
    • 编译中出现的一个Warning,不知道什么意思?
    • 怎么在DLL中用结构传递数据,我是初学者,请帮帮我!!
    • 如何在服务组件中主动通知客户一个突发的事件<NULL>?
    • MFC如何用滚动条控制部分区域中的多个控件
    • 关于ImageDirectoryEntryToData的使用(如何获得其它进程的地址)

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有