以文本方式查看主题

-  计算机科学论坛  (http://bbs.xml.org.cn/index.asp)
--  『 编程心得 』   (http://bbs.xml.org.cn/list.asp?boardid=42)
----  VC++编程指南  (http://bbs.xml.org.cn/dispbbs.asp?boardid=42&rootid=&id=87481)


--  作者:葛靖青001
--  发布时间:11/5/2010 11:03:00 AM

--  VC++编程指南
1. 显示和隐藏标题栏

  方法一:使用API实现

  //隐藏TitleBar

  LONG lStyle = ::GetWindowLong(this->m_hWnd, GWL_STYLE);

  ::SetWindowLong(this->m_hWnd, GWL_STYLE, lStyle & ~WS_CAPTION);

  ::SetWindowPos(this->m_hWnd, NULL, 0, 0, 0, 0,

  SWP_NOSIZE | SWP_NOMOVE | SWP_NOZORDER | SWP_NOACTIVATE | SWP_FRAMECHANGED);

  // 显示TitleBar

  ::SetWindowLong(this->m_hWnd, GWL_STYLE, lStyle | WS_CAPTION);

  ::SetWindowPos(this->m_hWnd, NULL, 0, 0, 0, 0,??SWP_NOSIZE | SWP_NOMOVE | SWP_NOZORDER | SWP_NOACTIVATE | SWP_FRAMECHANGED);

  方法二:使用CWnd成员函数ModifyStyle实现

  // 隐藏TitleBar

  ModifyStyle(WS_CAPTION, 0, SWP_FRAMECHANGED);

  // 显示TitleBar

  ModifyStyle(0, WS_CAPTION, SWP_FRAMECHANGED);

  2 . 怎么用SendMessage()来发送消息来清空它的内容??

  HWND hEditWnd=GetDlgItem(IDC_EDIT1)->GetSafeHwnd();

  ::SendMessage(hEditWnd,WM_SETTEXT,(WPARAM)0,(LPARAM)"");

  3. 弹出文件的属性窗口

  SHELLEXECUTEINFO ShExecInfo ={0};

  ShExecInfo.cbSize = sizeof(SHELLEXECUTEINFO);

  ShExecInfo.fMask = SEE_MASK_INVOKEIDLIST ;

  ShExecInfo.hwnd = NULL;

  ShExecInfo.lpVerb = "properties";

  ShExecInfo.lpFile = "c:\"; //也可以是文件

  ShExecInfo.lpParameters = "";

  ShExecInfo.lpDirectory = NULL;

  ShExecInfo.nShow = SW_SHOW;

  ShExecInfo.hInstApp = NULL;

  ShellExecuteEx(&ShExecInfo);

  4. 删除一个目录下的所有文件

  BOOL DeleteDirectory(LPCTSTR DirName)

  {

  CFileFind tempFind; //声明一个CFileFind类变量,以用来搜索

  char tempFileFind[200]; //用于定义搜索格式

  sprintf(tempFileFind,"%s\\*.*",DirName);

  //匹配格式为*.*,即该目录下的所有文件

  BOOL IsFinded=(BOOL)tempFind.FindFile(tempFileFind);

  //查找第一个文件

  while(IsFinded)

  {

  IsFinded=(BOOL)tempFind.FindNextFile(); //递归搜索其他的文件

  if(!tempFind.IsDots()) //如果不是"."目录

  {
char foundFileName[200];

  strcpy(foundFileName,tempFind.GetFileName().GetBuffer(200));

  if(tempFind.IsDirectory()) //如果是目录,则递归地调用

  { //DeleteDirectory

  char tempDir[200];

  sprintf(tempDir,"%s\\%s",DirName,foundFileName);

  DeleteDirectory(tempDir);

  }

  else

  { //如果是文件则直接删除之

  char tempFileName[200];

  sprintf(tempFileName,"%s\\%s",DirName,foundFileName);

  DeleteFile(tempFileName);

  }

  }

  }

  tempFind.Close();

  if(!RemoveDirectory(DirName)) //删除目录

  {

  AfxMessageBox("删除目录失败!",MB_OK);

  return FALSE;

  }

  return TRUE;

  }

  5.lib和dll文件的区别和联系

  .dll是在你的程序运行的时候才连接的文件,因此它是一种比较小的可执行文件格式,.dll还有其他的文件格式如.ocx等,所有的.dll文件都是可执行。

  .lib是在你的程序编译连接的时候就连接的文件,因此你必须告知编译器连接的lib文件在那里。一般来说,与动态连接文件相对比,lib文件也被称为是静态连接库。当你把代码编译成这几种格式的文件时,在以后他们就不可能再被更改。如果你想使用lib文件,就必须:

  1 包含一个对应的头文件告知编译器lib文件里面的具体内容

  2 设置lib文件允许编译器去查找已经编译好的二进制代码

  如果你想从你的代码分离一个dll文件出来代替静态连接库,仍然需要一个lib文件。这个lib文件将被连接到程序告诉操作系统在运行的时候你想用到什么dll文件,一般情况下,lib文件里有相应的dll文件的名字和一个指明dll输出函数入口的顺序表。如果不想用lib文件或者是没有lib文件,可以用WIN32 API函数LoadLibrary、GetProcAddress。事实上,我们可以在Visual C++ IDE中以二进制形式打开lib文件,大多情况下会看到ASCII码格式的C++函数或一些重载操作的函数名字。

  一般我们最主要的关于lib文件的麻烦就是出现unresolved symble 这类错误,这就是lib文件连接错误或者没有包含.c、.cpp文件到工程里,关键是如果在C++工程里用了C语言写的lib文件,就必需要这样包含:

  extern "C"

  {

  #include "myheader.h"

  }

  这是因为C语言写的lib文件没有C++所必须的名字破坏,C函数不能被重载,因此连接器会出错。


--  作者:qqq624345371
--  发布时间:3/17/2011 8:41:00 PM

--  
顶一下
W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
8,937.500ms