Error

C++博客 首页 新随笔 联系 聚合 管理
  217 Posts :: 61 Stories :: 32 Comments :: 0 Trackbacks
// filename: IRenderTarget.h
// author: enic
// date: 2014-02-12
#pragma once
#include "import_std.h"
namespace elib
{
class IRenerTarget
{
public:
virtual ~IRenerTarget(){}
        // !!!这里原先的名字和Windows sdk中的DrawText,结果上当了。表现在基类定义的DrawText接口,派生类始终调用不到
        // 正确的class,感觉是虚函数表查的不对,后来发现泥马明明函数名字都是DrawText结果派生类调用DrawTextW编译器都不
        // 报错误,然后把基类的改了还居然就正常了,,,
        // 最后发现是被windows sdk的UNICODE模式那些×××W ***A的宏忽悠了,然后编译器这边也没能报错出来,导致运行期间找
        // 不到正确的虚函数然后傻逼了。
        // 解决方案有两个:1.在基类中也引入Windows的头文件,这样大家一起被宏定义,始终是一致的名字。但是感觉不太好,仿
        // 佛被绑架了一样,我不喜欢这个感觉。而且不利于跨平台(总觉得编译器不够给力,应该报出来的)。或者是undefine,
        // 或者把导致问题的依赖文件移动到cpp中,这样应该报错会明显一点不至于到最后崩溃了无法分析(宏展开才能发现代码问题)
        // 2.该名字,果断改了,,,以后windows api中有×××W ***A两个版本的,果断要记得危险,,,
virtual bool DrawString(const estl::u16string& strText, int iX, int iY) = 0;
};
class CBaseRenderTarget : public IRenerTarget
{
public:
virtual bool DrawString(const estl::u16string& strText, int iX, int iY)
{
return false;
}
};
/*
class IRenderTexture
{};*/
};  //~ end of namespace elib


// filename: CDcRenderTarget.h
// author: enic
// date: 2014-02-13
// note:
//  @2014-02-14:现在最纠结的事情是,怎么在PaintEvent的时候获取到RenderTarget,目前只能确定一件事:
//               只有从NativeWnd才能获取到DC,才可能创建出真实的RenderTarget,那么创建就只交给NativeWnd
//               然后通过Paint事件传递出去.
//               仔细想想,发现上面说的方式也不行,上面的方式限制了paint的时机,也就是只有发生Paint事件
// 的时候才有可能得到Target然后绘图,貌似不够合理?下午想想有没有别的办法。
#pragma once
#include "../IRenderTarget.h"
#include "CDCT.hpp"
namespace elib
{
    // DC渲染目标
    class CDcRenerTarget : public CBaseRenderTarget
    {
    public:
        explicit CDcRenerTarget(CDCHandle dc);
virtual ~CDcRenerTarget();
    public:
        virtual bool DrawString(const estl::u16string& strText, int iX, int iY);
    private:
        CDCHandle m_dcHandle;
    };
};  //~ end of namespace elib
posted on 2014-02-15 20:39 Enic 阅读(433) 评论(0)  编辑 收藏 引用

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理