博文

[置顶] CListCtrl 取消label(2012-11-22 17:57:00)

摘要: 有时候,CListCtrl用来显示图片的时候,ICON模式下,不想看到label,即使把字体设为"",仍然可以看到文字区域。于是很多做法都出现了   (1)SetIconSpacing。这个函数在横排排列的时候,似乎很有用,一到竖排,乱七八糟,诡异的很。 (2)将ListCtrl的Font大小设置为-1,行么?   实际上,在WinXp之后CListCtrl就增加了扩展风格:LVS_EX_HIDELABELS   int nStyle = m_thumbnailVList.GetExtendedStyle(); m_thumbnailVList.SetExtendedStyle(nStyle | LVS_EX_HIDELABELS | LVS_EX_DOUBLEBUFFER);   设置即可。 ......

阅读全文(1493) | 评论:2 | 复制链接

[置顶] WinRAR 批处理好用啊(2012-11-16 19:35:00)

摘要: 经常压缩代码,但是一些无用的文件都不想压缩,会造成体积太大,只能通过rar本身提供的批处理来了。相关的语法在WinRar帮助里面。   新建bat,键入:   @echo off if "%1" == "h" goto begin
mshta vbscript:createobject("wscript.shell").run("%~nx0 h",0)(window.close)&&exit
:begin   set temppath=%~dp0 set temppath=%temppath:~0,-1% "C:\Program Files\WinRAR\WinRAR.exe" a -m3 -ibck -ag[yyyy-MM-dd] -x*.pch -x*.obj -x*.ipch -x*.pdb -x*.sdf package.rar %temppath%   start mshta vbscript:msgbox("压缩完毕!",0,"提示")(window.close)&&exit   a表示压缩处理(不是解压缩),-m3表示标准压缩模式(还有存储,最快等), -ag表示加入在名称中加入当前压缩时间,-x表示排除哪些文件,package.rar是相对路径,存储在本路径下,%~dp0表示这个bat所在的绝对路径,意思就是要将这个跟bat同在的目录全部压缩成一个包。这样以后将bat随意拷贝到哪个目录下,就将那个目录打包。简单方便。-ep1表示rar文件里面不存储绝对路径,只存储上层文件夹,防止嵌套过深。   应用中发现%~dp0返回的路径最后是有斜杠的。这样rar默认就不打包子文件夹。所以temppath要将斜杠先去掉。  ......

阅读全文(2334) | 评论:1 | 复制链接

[置顶] 详论fortran格式化输出(2012-08-10 17:40:00)

摘要: 格式化输出的控制字符非常的丰富,但常用的并不多,一般说来:" I 、F、E、A、X "是最常使用的几个格式,最好把它们都记下来。
Iw[.m] 以w个字符的宽度来输出整数,至少输出m个数字。                                     如:write(*,"(I5)") 100   输出:_ _100 ; 前面两空格
Fw.d 以w个字符文本框来输出浮点数,小数部分占d个字符宽,输出文本框的设置不中会出现*号。 如:write(*,"(F9.3)") 123.45  输出:_ _123.450 ; 前面两空格,后补0
Ew.d[Ee] 用科学计数法,以w个字符宽来输出浮点数,小数部分占d个字符宽,指数部分最少输出e个数字。 如:write(*,"(E15.7)" 123.45 输出:_ _0.1234500E+03 ; 输出不中15个字符的部分补上空白,小数部分不足7位的会补0
Dw.d 使用方法同Ew.d,差别在于输出时用来代表指数的字母由E换成D。
Aw 以w个字符宽来输出字符串。 write(*,"(A10)") "Hello" 固定用是为10我个字符段来输出字符串,不足的前面补空格
nX 输出位置向右移动n位。write(*,"(5X,I3)") 100 ; 将先填5个空格,再输出整数。
Lw 以w个字符宽来输出T或F的真假值。wri......

阅读全文(8461) | 评论:8 | 复制链接

[置顶] VC程序重定向printf到console窗口(2012-07-26 12:41:00)

摘要: 本方法简单易用,适用于VC6、VC.NET2003 假定你创建的VC应用程序叫做ImageFilter,那么只需添加如下代码即可: [1] 打开ImageFilter.cpp文件,增加 #include <io.h>
#include <fcntl.h> 
void InitConsole()
{
 int hCrt; 
 FILE *hf; 
 AllocConsole(); 
 hCrt = _open_osfhandle( 
  (long)GetStdHandle(STD_OUTPUT_HANDLE), 
  _O_TEXT ); 
 hf = _fdopen( hCrt, "w" ); 
 *stdout = *hf; 
 setvbuf( stdout, NULL, _IONBF, 0 ); 
 printf("InitConsoleWindow OK!\n\n"); 
}   [3] 在函数'BOOL CImageFilterApp::InitInstance()'调用该函数: ......

阅读全文(2999) | 评论:1 | 复制链接

[置顶] 如何在VC2008中调用Fortran?(2012-07-26 10:45:00)

摘要: 两种方法:   (1)直接使用Fortran代码编译出来的obj文件进行链接。使用IVF(Intel Visual Fortran Compiler)进行编译得到obj文件,在VC2008中进行加入其link即可,如test1.obj。   (2)在Fortran函数声明中加入DLLEXPORT项,令其成为导出函数,在VC2008加入test1.lib的link即可。注意不管Fortran中是subroutine还是function,都要加入形参类型的声明,方可导出: double precision function addF(x, y) !DLLEXPORT选项 !DEC$ ATTRIBUTES DLLEXPORT, STDCALL:: addF !形参类型声明 double precision x, y addF = 2 return end function addF   不管上述哪种方法,最后注意在VC2008中调用函数前进行声明,如: extern "C" double __stdcall addf(double x, double y);   如果还有不清晰的地方,请用google搜索文章《基于VS2008 和IVF11 的C/C++和Fortran 混合编程》,内有详细介绍。 ......

阅读全文(2063) | 评论:1 | 复制链接

[置顶] Windows Virtual PC 丢失“创建虚拟机”的解决方案(2011-09-14 18:05:00)

摘要:   今天想新建一个虚拟机来着,结果竟然发现VPC新建虚拟机这个项目没了……汗,可能之前优化过度了…… 放狗搜了下,找到MSDN上的一篇博文,连接如下:http://blogs.msdn.com/b/virtual_pc_guy/archive/2009/07/06/fixing-a-missing-create-virtual-machine-option-windows-virtual-pc.aspx 额,考虑到E文不好的童鞋,我来翻译一下吧: Some people are finding that when they install Windows Virtual PC, their Virtual Machines folder does not have the option to Create Virtual Machine.  If this happens to you – there are three options that you can try: 一些童鞋发现当他们安装VPC之后,他们的“虚拟机”目录中没有 “创建虚拟机”这个选项啦。如果这个问题发生在了你身上,你可以尝试: When in the Virtual Machines folder, press “Alt” to open the menu.  Select Tools and then Folder options…. On the dialog that is opened click Restore Defaults.  Once you have done this, log out and log back in to see if the Create Virtual Machine option is now present. If this doesn’t work – try running the registry file that is attached to this blog post, and restarting the computer.  This registry file deletes any custom settings for your folder......

阅读全文(2446) | 评论:2 | 复制链接

[置顶] 类静态成员变量的导出问题(2009-06-03 16:01:00)

摘要:编程许久,在使用DLL导出类的时候,用的都是AFX_EXT_CLASS,直到近日,才终于发现这个家伙有点缺陷。     让我们来看这样一个问题:新建一个MFC Extension DLL ,并在其中新建一个类testA。   // testA.h class AFX_EXT_CLASS testA 
{
public:
   testA();
   virtual ~testA();
public:
   static const double PI;

};              在头文件中声明了类静态变量PI,并在testA.cpp中进行了初始化。  const double testA::PI = 3.14; 编译通过,生成lib,dll.   试验发现:     如果客户是一般的exe程序,使用PI正常,编译通过。     如果客户是另一个DLL,使用PI的时候编译通过不了,报如下错误: error   LINK2001:   unresolved   external   symbol   ... PI ...      在网上找了好久,没有找到解决方案,只好用全局变量PI来代替,或者使用全局函数来返回PI的值,即  double GetPI()
{
 return testA::PI;
}           有一天终于发现了解决办法:即采用普通的__declspec(dllexport)和__declspec(dllimport),而不采用AFX_EXT_CLASS   // testA.h #ifdef SIMPLEDLL_EXPO......

阅读全文(7289) | 评论:0 | 复制链接

[置顶] 组合,关联,聚合的区别(转)(2009-06-03 14:48:00)

摘要: 类间关系 在类图中,除了需要描述单独的类的名称、属性和操作外,我们还需要描述类之间的联系,因为没有类是单独存在的,它们通常需要和别的类协作,创造比单独工作更大的语义。在UML类图中,关系用类框之间的连线来表示,连线上和连线端头处的不同修饰符表示不同的关系。类之间的关系有继承(泛化)、关联、聚合和组合。 (1)继承:指的是一个类(称为子类)继承另外的一个类(称为基类)的功能,并增加它自己的新功能的能力,继承是类与类之间最常见的关系。类图中继承的表示方法是从子类拉出一条闭合的、单键头(或三角形)的实线指向基类。例如,图3.2给出了MFC中CObject类和菜单类CMenu的继承关系。 类的继承在C++中呈现为: class B { }  class A : public B{ } (2)关联:指的是模型元素之间的一种语义联系,是类之间的一种很弱的联系。关联可以有方向,可以是单向关联,也可以是双向关联。可以给关联加上关联名来描述关联的作用。关联两端的类也可以以某种角色参与关联,角色可以具有多重性,表示可以有多少个对象参与关联。可以通过关联类进一步描述关联的属性、操作以及其他信息。关联类通过一条虚线与关联连接。对于关联可以加上一些约束,以加强关联的含义。    关联在C++中呈现为: class A{...}  class B{ ...}  A::Function1(B &b) //或A::Function1(B b) //或A::Function1(B *b) 即一个类作为另一个类方法的参数。 (3)聚合:指的是整体与部分的关系。通常在定义一个整体类后,再去分析这个整体类的组成结构。从而找出一些组成类,该整体类和组成类之间就形成了聚合关系。例如一个航母编队包括海空母舰、驱护舰艇、舰载飞机及核动力攻击潜艇等。需求描述中“包含”、“组成”、“分为…部分”等词常意味着聚合关系。 (4)组合:也表示类之间整体和部分的关系,但是组合关系中部分和整体具有统一的生存期。一旦整体对象不存在,部分对象也将不存在。部分对象与整体对象之间具有共生死的关系。   聚合和组合的区别在于:聚合关系是“has-a”关系,组合关系是“contains-a”关系;聚合关系表示整体与部分的关系比较弱,而组合比较强;聚合关系中代表部分事物的对象与代表聚合......

阅读全文(2090) | 评论:1 | 复制链接

[置顶] C++小题,你敢挑战吗(晕死你)?(更新中)(2006-12-27 22:14:00)

摘要:1. class B{ protected:  virtual void f( ) { cout << "B" << endl;} public:   void  g ( )  { f( ) ; } };   class  D : public  B{    protected :          void f( ) { cout << "D" << endl ; } }   int main () {       D   d;       d . g ( );      return  0; }   详细解答:既然是继承,g又没有覆盖,那么g就是同一个入口地址。而在调用f的时候,涉及到this指针。这个时候,this指针是基类指针。由于绑定了虚函数表,那么就会查询到实际上是指向派生类D的。于是得出结果。 这里如果把virtual去掉,那么直接进入基类的f()函数入口。 2. class A{
public:
       A( ) { a=0;}
       void set_value(int x) { a=x;}
       void print(){cout<<a;}
private :
      int a;
 
};
class B:public A{
public:
     
   &n......

阅读全文(5015) | 评论:3 | 复制链接

[置顶] 怎样衡量一个人的编程能力(2006-11-29 20:36:00)

摘要:十一很快过去了,真快,还没怎么玩好.不过我最高兴的还是在这段时间完成了一个小的矢量图形系统,用VC做的.虽然GIS专业已经有'老大'--ArcGIS,但是我们这些将来的专业人员以后还要从事2次开发的,所以先做2个小程序当作锻炼把. 这个系统没什么大的功能,就是搞搞数字化,单点查询,单源查询,单对查询等等.最好玩的还是单对了.就是查询2点的最短路径.这个的算法有很多,于是我上百度上搜啊搜,没有一个搞的定.最后还是采用了迪杰斯特拉算法,最不好意思的就是这个算法是上学期数据结构中学过的,呵呵. 通过这次实习,我也发现了一个问题.好多人在学习可视化编程的时候,只注重界面设计,并不重视流程控制,功能实现,内部机制等.结果是学了VB忘了C,学了VC忘了C++,其实我认为后者才是最重要的.它是衡量一个人程序设计能力的标准.陈建春在有本书上写的蛮好: "程序设计者特别是初学者应该认识到,程序设计的最终目的是为了完成具体的任务,所以在应用程序设计中,程序的框架和界面等部分在一个程序中占的比重是最小的,并非程序设计的本质. 程序设计的能力体现在对数据的组织和控制,流程的控制等上面,不同的计算机语言虽然各有特点,但是几乎所有的计算机语言其设计思想是内在相通的,程序设计能力的高低与采用哪种计算机语言没有必然的联系" 上面这段话让我茅塞顿开.不能为了学习一门语言而去学习语言,它是用来与计算机沟通交流的.学了语言就要去应用,这样才能更好的掌握.......

阅读全文(6480) | 评论:3 | 复制链接