一.使用透明画刷
使用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.h和comsupp.lib
CDC *pDC =GetDC();
Graphics graphics( pDC->m_hDC);
Image image1(b, TRUE);
graphics.DrawImage(&image1, 110,178);
四.加载jpg图片:
//加载并显示.jpg格式的图片
//参数说明:strPath:图片的路径 nIndex:需要显示那张图片
//注:如果是显示左边那张图片,则nIndex为1,右边那张是nIndex为2
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++;
}
}