zoukankan      html  css  js  c++  java
  • 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函数不能被重载,因此连接器会出错。 

  • 相关阅读:
    为图片指定区域添加链接
    数值取值范围问题
    【leetcode】柱状图中最大的矩形(第二遍)
    【leetcode 33】搜索旋转排序数组(第二遍)
    【Educational Codeforces Round 81 (Rated for Div. 2) C】Obtain The String
    【Educational Codeforces Round 81 (Rated for Div. 2) B】Infinite Prefixes
    【Educational Codeforces Round 81 (Rated for Div. 2) A】Display The Number
    【Codeforces 716B】Complete the Word
    一个简陋的留言板
    HTML,CSS,JavaScript,AJAX,JSP,Servlet,JDBC,Structs,Spring,Hibernate,Xml等概念
  • 原文地址:https://www.cnblogs.com/mtcnn/p/9410204.html
Copyright © 2011-2022 走看看