最近blog.com状态不太稳定,一会上得了一会上不了的,所以上周基本那个专题研究没更新。先留一留吧,反正迟早要弄了。
这次说的是MFC状态栏的图标修改问题,问题起源是,之前帮那个老师做的那个软件,他一个月前曾跟我说过,说功能算是实现了,但是作为一款要申请软件著作权的东西,希望我把它做的“像一款软件”,言下之意,美工。。。
作为不是专业做软件,搞算法的人来说,这个需求简直是喵了个咪的。。。。
没办法,只好搞咯,然后研究了一下现在软件的UI,比如说之前那篇tab的做法就是参考了ADS的界面,然后最近下漫画看到千寻漫画下载器的那个右上角的东西,觉得要不就删掉菜单栏,剩下很大的工具栏作为按钮吧,然后发现呢,虽然很容易把工具栏删掉(就在框架类OnCreate中加一句SetMenu(NULL)),然后把工具栏图标弄大更简单,就是在资源里面toolbar把图标拖大就可以了。
但是问题来了,首先是这样子图标我们要自己画,小图标就算了,现在我们还把图标拖大,那尼玛你真以为我是大触啊。但是这也有办法解决,就是找一幅图,转成bmp,然后添加到bitmap资源中,再把bitmap的图像复制出来,贴到工具栏中,真的这么做的话,那恭喜你,你会发现你不认识你贴过去的图了,因为工具栏编辑器里面的图只支持16色,你256色变成16色肯定你自己都不认得啦。 阅读全文…
之前说了在单文档中建立一个Tab标签控件的方法,但是我一直觉得那个方法比较绕,没那么直接,最直接的方法是什么?那就是直接在C***View中Create一个CTabCtrl控件变量,然后给他添加一些对话框和消息响应什么的,这样就可以少用一个CFormView类,改来改去什么的最烦了~ 下面就是这个方法: 首先第一步还是建立你想要的几个最后作为标签页的对话框,我们这里还是用两个标签页来做例子,假设新建了两个对话框,生成相应的类,最重要的是,要将他们的Style设置成Child。假设ID为IDD_DIALLOG_TAB1,IDD_DIALLOG_TAB2。而且将它们的Boarder设置成None,以免影响美观效果。 然后回到我们的C***View类,假设建立的是CTabCtrlTestView,我们在里面添加两个变量:
CTabCtrl* m_TabCtrl;
CTypedPtrArray<CObArray, CDialog*> m_DlgArray;
一个就是Tab控件,另一个是存储对话框的数组。 接下来写好View类的构造函数的析构函数: 阅读全文…
前阵子给一个老师写一个东西,功能做的差不多了,他说希望把界面做的好看一下,然后想了想,那就在界面表面添加一个Tab控件来糊弄一下他呗。
好像大部分添加Tab的都是在对话框里面添加的,然后我已开始给他写好的东西是基于单文档结构的MFC的,查了一下添加的方法,这里留个笔记吧。
我查的过程中发现了两种方法,这里先说已经“破解”了的一种,另一种周末研究研究,还有一个别人写好的类似于Excel的Sheet切换效果的,有空再放上来。
正文: 阅读全文…
其实这个问题我已经遇到过好几次了,但是每次弄好后都忘了,所以这次记录一下;
其实问题的原因在于IE8和VS冲突了,如果不装IE8就不会有事。(我XP也不知道什么时候装的IE8。。)
找了一下,原因这么写的。。 阅读全文…
嘛,其实这个不难,以前学孙鑫的MFC的时候也学过,但是好久没弄就忘了,最近做的那个要读大量的数据,但是读取速度比较慢,每次一读取,我就不知道它是乖乖在后台读取呢,还是完全死掉了。。所以,弄个进度条出来看看,让人有点期待也好。。就好像高中上不喜欢的课一样,每节课都是45分钟,但是如果给你手机或者手表不断地看看时间,你就多少觉得有点期待,啊,过去15分钟了,啊,20了,。。。。啊,还剩五分钟就解放了!!嗯,大概。。就是这样吧。。 阅读全文…
我们知道MFC中如果高频率调用Invalidate方法的话,就会出现闪烁,因为每次都会刷新屏幕,擦除写入擦除写入,所以才会出现这个问题。我之前一直用了个很猥琐的方法,就是用OPENCV(链接里面的MFC中使用OPENCV显示图片API)。。这是多亏了opencv里面显示的机制本身估计。。。应该用的就是双缓冲吧。。最近老板交代写一个上位机也要画图,但是实际运行这个上位机的机子太破了,我可不想又搞什么opencv库在上面,而且将来放到别的机子上时还要附带上OPENCV的lib,DLL神马的,所以就将就用MFC自带的函数画图咯。。
所谓双缓冲就是我们是在内存中建立另外一个DC,然后画图都在这个内存DC中画,最后要现实的时候,直接用BitBlt直接进行图形块赋值,BitBlt好处在于非常之快!!而且我们要取消屏幕擦除,也就是Invalidate(FALSE),而不是TRUE。 阅读全文…
最近开始着手写一个麻将自动听牌分析器的程序(这里就不介绍了,等我写完了的话,会有详细介绍的。。)
然后遇到一个问题,就是要在MFC的基于对话框的Picture Control空间上显示指定路径的一张JPG图片。
但是呢,Picture控件主要支持的是Bitmap格式的,然后经过上网一阵查找,后来发现是要利用COM里面的一个IPicture的东西。
步骤就是先读取文件,然后。。。诶。。自己看下面的代码,我弄了详细的注释。。不懂Google。。 阅读全文…
获取控件及控件使能:
CButton *pButton=(CButton*)GetDlgItem(IDC_STOP);
pButton->EnableWindow(FALSE);
=================================================
文件拖拽功能:
→→→→→→→点这里
=================================================
文件读取:
CFile mFile(_T(FileName),CFile::modeRead);
mFile.Read(Buffer,BufferLength);
CFile::SeekToBegin();//文件指针回到头
mFile.Close();
CFile mFile(_T(FileName),CFile::modeWrite|CFile::modeCreate);
mFile.Write(Buffer,BufferLength);
mFile.Flush();
如果要实现每次读取文件的一行,要用CStdioFile,这个类继承于CFile
CStdioFile::ReadString(CString) 阅读全文…
最近玩空轨3rd,经过内心无数次激烈的斗争,我毅然决然的打开了修改器,然后看到那个修改器的时候,我第一个注意到的不是这个修改器的功能,而是里面有个group控件,要把游戏的save文件拖到这里面来,再对save文件读取后修改。然后。。我一直在想的就是。。这个功能要怎么实现,想象QQ发文件也是拖拽功能,以前有个ASS字幕文件改SRT的也是拖拽一下就可以了。最近老板让我写的一个自动光栅仪的上位机程序里面要读取目标文件,我用的还是DoModel一个CFileDialog变量,如果实现拖拽的话,交互性感觉会好很多。
然后今早来实验室就上网查找资料,研究拖拽功能。
话说这个东西一点也不难,因为MFC本身就设置了这个功能。
最简单的你在MFC里面建立一个基于Dialog的工程,然后在对话框编辑器里面把Accept File改成TRUE,然后再给对话框添加一个WM_DROPFILES的消息响应,在OnDropFiles函数里面写拖拽到对话框里面后要响应的是什么代码就行了。 阅读全文…