常用函数及其使用格式(持续更新中.......)

一.使用透明画刷

使用SDK比较容易,只要
GetStockObject(NULL_BRUSH);
然后选进设备描述表就可以了。

关于MFC中的CBrush类,MS没有提供直接获得透明画刷的方法,查了下资料,可以使用如下的方法:
CBrush *pBrush = CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH));
二.使用DLL库的常用操作

HINSTANCE hDllInst = LoadLibrary("youApp.DLL");
if(hDllInst)
{
typedef DWORD (WINAPI *MYFUNC)(DWORD,DWORD);
MYFUNC youFuntionNameAlias = NULL; // youFuntionNameAlias 函数别名
youFuntionNameAlias = (MYFUNC)GetProcAddress
(hDllInst,"youFuntionName");
// youFuntionName 在DLL中声明的函数名
if(youFuntionNameAlias)
{
youFuntionNameAlias(param1,param2);
}
FreeLibrary(hDllInst);
}

三.加载png图片:

BSTR b=_com_util::ConvertStringToBSTR(strPhoneBrand.GetBuffer(0));

//使用前需要加上comutil.hcomsupp.lib

   CDC *pDC =GetDC();

   Graphics graphics( pDC->m_hDC);

   Image image1(b, TRUE);

   graphics.DrawImage(&image1, 110,178);

四.加载jpg图片:

//加载并显示.jpg格式的图片

//参数说明:strPath:图片的路径  nIndex:需要显示那张图片

//:如果是显示左边那张图片,nIndex1,右边那张是nIndex2

void LoadJPGImage(CString strPath ,int nIndex)

{

   IPicture *m_picture;

   OLE_XSIZE_HIMETRIC m_width;

   OLE_YSIZE_HIMETRIC m_height;

   

   CString m_filename=strPath;//文件名

   

   CFile m_file(m_filename,CFile::modeRead );

   

   //获取文件长度

   DWORD m_filelen = m_file.GetLength();

   

   //在堆上分配空间

   HGLOBAL m_hglobal = GlobalAlloc(GMEM_MOVEABLE,m_filelen);

   

   LPVOID pvdata = NULL;

   //锁定堆空间,获取指向堆空间的指针

   pvdata = GlobalLock(m_hglobal);

   

   //将文件数据读区到堆中

   m_file.ReadHuge(pvdata,m_filelen);

   

   IStream* m_stream;

   

   GlobalUnlock(m_hglobal);

   

   //在堆中创建流对象

   CreateStreamOnHGlobal(m_hglobal,TRUE,&m_stream);

   

   //利用流加载图像

   OleLoadPicture(m_stream,m_filelen,TRUE,IID_IPicture,(LPVOID*)&m_picture);

   

   m_picture->get_Width(&m_width);

   m_picture->get_Height(&m_height);   

   

   CDC* dc = GetDC();

   

   

   CRect rect;

   GetClientRect(rect);

   SetScrollRange(SB_VERT,0,(int)(m_height/26.45)-rect.Height());

   SetScrollRange(SB_HORZ,0,(int)(m_width/26.45)-rect.Width());

   if (nIndex == 1)

   {

      m_picture->Render(*dc,110,178,80,50,0,m_height,m_width,-m_height,NULL);

   }

   else

   {

      m_picture->Render(*dc,238,178,100,80,0,m_height,m_width,-m_height,NULL);

   }

}

 五.获取本地驱动器:

bool GetDriver(void)
{
 char* ch = new char;
 GetLogicalDriveStrings(100,ch);
 while (*ch)
 {
  
  m_strDriver.push_back(ch);
  int nIndex = strlen(ch);
  ch += nIndex;
  ch++;
 }
 return true;
}

六.获取我的电脑图标:

ExtractIcon((HINSTANCE)GetCurrentProcess(),_T( "c://windows//explorer.exe"),0)s

七.获取右键的单机事件,并弹出菜单:

 CPoint cp;
 GetCursorPos(&cp);
 m_tree.ScreenToClient(&cp);

 HTREEITEM titem = m_tree.HitTest(cp,NULL);

 CMenu menu;
 VERIFY(menu.LoadMenu(IDR_MENU1)); // IDR_MENU1 菜单的名字
 CMenu *pPopup=menu.GetSubMenu(0);
 ASSERT(pPopup!=NULL);

 if(titem)
 {
  RECT rect;
//  m_tree.SelectItem(titem);
  m_tree.GetItemRect(titem,&rect,true);
  if(rect.left < cp.x && rect.right > cp.x)
  {
   ClientToScreen(&cp);    
   pPopup->TrackPopupMenu(TPM_LEFTALIGN,cp.x + 15,cp.y + 15,this);
   

  }
 }

 八.常用贴图代码:

m_bit.LoadBitmap(IDB_BITMAP1);
 CDC dcCompilicationDC;
 dcCompilicationDC.CreateCompatibleDC(&dc);

 CRect rect;
 GetClientRect(&rect);
 dcCompilicationDC.SelectObject(&m_bit);
 dc.BitBlt(0,0,rect.Width(),rect.Height(),&dcCompilicationDC,0,0,SRCCOPY);

九.多行文本自动换行设置:

Multiline |Want   return(不选中也不会有错) 选中
把 Auto   HScroll 未选中

十.分隔符分割字符

//根据分隔符来分割字符串
//结果使用字符数组来保存
BOOL CDlgInfoCenter::SpiltString(CString strTime,CStringArray& strArray)
{
 // strTime = "2011-05-27 11:32:02";
 int len = strTime.GetLength();
 int index;
 while( !strTime.IsEmpty() )
 {
  if ( ( index = strTime.Find( '-' ) ) != -1 || ( index = strTime.Find( ' ' ) ) != -1 || ( index = strTime.Find( ':' )) != -1 )
  {
   CString strTemp = strTime.Left( index );
   strTime = strTime.Mid( index + 1,len - index -1 );
   strArray.Add( strTemp );
  }
  else
  {
   strArray.Add( strTime );
   strTime.Empty();
  }
 }
 return TRUE;
}

十一.CSting转化为char*

可以直接强制类型转换   (LPTSTR)(LPCTSTR)str,即为char*类型

十二.复制文本内容至剪切板:

BOOL CopyContent( string strContent )
{
 if ( OpenClipboard() )
 {
  HANDLE hClip;
  EmptyClipboard();
  char* pBuf;

  hClip = GlobalAlloc( GMEM_MOVEABLE,strContent.size() +1 );
  pBuf = (char *)GlobalLock( hClip );
  strcpy( pBuf ,strContent.c_str() );

  GlobalUnlock( hClip );
  SetClipboardData( CF_TEXT,hClip );
  CloseClipboard();
  return TRUE;
 }
 return FALSE;

}

十三.项目经验

1.       关于获取字符串长度的方法:
◆ 使用CSize GetTextExtent(LPCTSTR lpszString,int nCount) const;该函数返回字符串的高度和宽度.
◆ 使用CDC::DrawText函数来获取.最后一个参数使用DT_CALCRECT,此时返回字符串的CRect.(这里可能要适当的把字体及大小加入到设备描述表中)

2.       静态成员函数没有初始化说产生的链接时的错误.

 十四.关于html视频的显示代码:

<embed id="" src="http://player.youku.com/player.php/sid/XNzc0NTY2NzY=/v.swf" width="400" height="400" type="audio/mpeg" autostart="false" loop="false"> </embed>

 暂停运行:

void InterceptLenth(CString& str,int nMaxLen,CString& strOut)

{  

int i= 0;  

int last = 0; 

char *s = str.GetBuffer(str.GetLength());  

char *pre = s;  

while(i<nMaxLen)  

{  

char *next = (char*)CharNext(s); //保存下一个字符  

int n = strlen(pre)-strlen(next);  

CString str1;  

str1= str.Mid(last,n);  

strOut += str1;  

last += n;  

s+=n;  

pre = next;  

i++;  

}  

}



你可能感兴趣的:(常用函数及其使用格式(持续更新中.......))