上一篇文章定制IE浏览器弹窗中的外部窗口就是一个不规则窗口,这篇文章介绍下其是如何实现的。思路是根据这张图片创建一个不规则区域,然后将窗口的区域设置为该不规则区域。

第一步,在资源文件rc中设置对话框的属性

阅读全文

如何在MFC中使用AntTweakBar

发布在 图形学, OpenGL

这篇文章是在我的另一篇文章“继承mfc的cwnd类渲染opengl”的基础上改进的。
AntTweakBar是一个条状的菜单库,类似于内嵌于渲染窗口的属性条,可以和OpenGL渲染窗口融为一体,效果很好看。以前见过有人用这个库,效果比较好看就关注了下。在网上找相关的资料,发现只有人在glut下使用。还有人因为在MFC下使用不成功,认为和MFC不兼容。其实,这个库只要给了渲染引擎就行了,然后把一些事情传给它就能交互了。
AntTweakBar提供的都是简单的C接口,所以非常方便和已有的界面框架整合,无论你用的是OpenGL还是DX渲染,无论你用的界面框架是glut还是glfw或者sdl等等都行。官方网站也提供了整合步骤
我现在介绍下,在我的框架里面的整合步骤。
第一步,在OnCreate函数里面调用TwInit(TW_OPENGL, NULL);初始化。
第二步,在OnCreate函数里面创建bar并且绑定变量。如,

1
2
3
4
5
*myBar;
myBar = TwNewBar("Test");
TwDefine(" Test refresh=0.5 color='96 216 224' alpha=0 text=dark");
static int nTest = 0;
TwAddVarRW(myBar, "Test", TW_TYPE_INT32, nTest, "test");
阅读全文

这应该是用vc在程序中添加视频音频播放器最方便的方法了。但是,你如果只是用vs2010或者其它版本工具插入activex控件,然后生成代码,那就不一定能够得到你想要的全部功能。
wmplayer貌似还有个对应的wm sdk。这个可以用com接口的形式更加底层的控制播放器。但是,如果我们能够得到相关的实现播放器功能的代码,我们也能够得到相同程度的控制。前段时间,在网上找了很久,终于找到一大堆有个wmplayer的类代码。用其中的CWMPPlayer4类绑定播放器就能够得到很强大的控制了,用这个类的成员函数可以得到其他控制和设置类的接口等。
用这个东西最大的缺陷是无法播放内存数据,如果是内存数据,必须生成临时文件。最大的优点是简单方便,功能强大,还可以在不同版本的windows平台兼容,只要上面有默认的wmplayer播放器。这个东西还可以播放网络数据,因为文件其实是通过url索引的。因此,在要求简单的时候,还可以用这个东西快速实现一个网络播放器
下面提供wmplayer相关类的代码,WMP

屏蔽右键和全屏都可以在PreTranslateMessage这个虚函数里面处理,比如if (pMsg->message == WM_LBUTTONDBLCLK)
return TRUE;返回TRUE就不会对这个消息进行处理了。屏蔽右键也可以通过调用m_mediaPlayer.put_enableContextMenu(FALSE);处理。
最奇葩的是屏蔽当前播放的是哪个文件的信息,居然有人奇葩到提出这样的需求。找来找去都没有这样的接口,我都直接看wmsdk的文档了,最后想出了个奇葩的办法,就是用一个static控件遮住。
到现在觉得,最好的操作wmplayer的方式是下载微软的wmsdk,从而直接用接口操作,可以提供最大限度的控制。

阅读全文

如何将内存中的位图数据绘制在DC上

发布在 MFC

假如你定义了一个位图类,里面包含位图头,位图信息头,调色板,位图数据。然后你按照位图的格式将位图文件读入你的类中,现在你知道了位图的全部信息了。主要信息包含在位图信息头里面,数据则在位图数据缓冲里面。现在的问题是,在Windows下面如何将一张位图画出来,而且现在是如何从数据缓存里面绘画出位图。
一般情况,我们都是直接绘制在dc里面,而不是绑定到子控件,让子控件自己绘画,比如picture控件之类的,我觉得提供绘制在dc里面的接口更具有广泛性。

现在我知道两种从内存数据绘制彩色位图的2种方法。第一种麻烦一点,第二种则相当直接。
方法一:
第一步,用CreateCompatibleDC创建跟目标dc的兼容性内存dc。
第二步,用CreateCompatibleBitmap创建跟目标dc的兼容性位图。
第三步,用SelectObject将第二步创建的兼容位图选入第一步创建的兼容dc中。
第四步,用SetDIBits设置兼容位图的数据缓冲
第五步,用BitBlt将数据从兼容内存dc绘制到目标dc。
第六步,删除兼容位图和兼容dc。
代码如下,其中buffer代表位图数据缓冲。

阅读全文

今天在做课设,由于想给程序加上删除以前的配置文件的功能,由于某种原因,同类型的文件比较多,加上暑假实习的时候,做了个用dir命令实现的批量文件修改器,所以决定用del命令,一下子写好后,发现以前由于没有要求做界面,而现在课设我用的是MFC里面的CFormView做的界面,所以会闪烁而过一个console窗口,实在不爽之,所以,找方法去掉它。
网上找来找去,只找到启动cmd,传参数的都很少,传参数时候组合参数的更加少,加上我对dos命令不熟悉,所以实在悲催,浪费了不少时间。
这种东西,一直窃以为有人做好之后,提供比较合格的接口,大家以后都方便,所以贴出来,大家雅俗共赏,批评下。还发现网上的代码有个问题,居然大多把直接cmd路径写上去,其实大家都知道,系统路径是不确定的,所以特定修正了这个bug,而且我也实验了下,无论参数是绝对路径还是相对路径这个函数都是有效的。
大家用这个函数的时候,记得cmd命令都是可以匹配通配符的哦。

函数代码如下:

阅读全文
  • 第 1 页 共 1 页
作者的图片

远行

孤筏重洋


游戏开发


Guang Zhou