eVC下输出空心文字
void DrawHollowText( HDC hDC, RECT *pRect, LPCTSTR lpszString )
{
// 开始画8个方向的轮廓,从左上角开始顺时针
SetBkMode( hDC, TRANSPARENT );
SetTextColor( hDC, 0x000000 ); // 黑色
// 左上角
--pRect->top;
--pRect->left;
DrawText( hDC, lpszString, -1, pRect, DT_LEFT | DT_TOP | DT_SINGLELINE );
// 正上方
++pRect->left;
DrawText( hDC, lpszString, -1, pRect, DT_LEFT | DT_TOP | DT_SINGLELINE );
// 右上角
++pRect->left;
DrawText( hDC, lpszString, -1, pRect, DT_LEFT | DT_TOP | DT_SINGLELINE );
// 右
++pRect->top;
DrawText( hDC, lpszString, -1, pRect, DT_LEFT | DT_TOP | DT_SINGLELINE );
// 右下角
++pRect->top;
DrawText( hDC, lpszString, -1, pRect, DT_LEFT | DT_TOP | DT_SINGLELINE );
// 正下方
--pRect->left;
DrawText( hDC, lpszString, -1, pRect, DT_LEFT | DT_TOP | DT_SINGLELINE );
// 左下角
--pRect->left;
DrawText( hDC, lpszString, -1, pRect, DT_LEFT | DT_TOP | DT_SINGLELINE );
// 左
--pRect->top;
DrawText( hDC, lpszString, -1, pRect, DT_LEFT | DT_TOP | DT_SINGLELINE );
// 画中央的文字(白色)
SetTextColor( hDC, 0xffffff );
++pRect->left;
DrawText( hDC, lpszString, -1, pRect, DT_LEFT | DT_TOP | DT_SINGLELINE );
}
说明:eVC下对于GDI的支持有限,所以只能根据DrawText的需要而使用矩形,而不是文字坐标。
EVC4.0发生CVT1102错误的解决方法
Linking...
CVTRES : fatal error CVT1102: out of memory; 39 bytes required
LINK : fatal error LNK1123: failure during conversion to COFF: file invalid or corrupt
InstallShield修改注册表
NUMBER nResult;
STRING szPath, szKeyName;
begin
RegDBSetDefaultRoot ( HKEY_CURRENT_USER );
szKeyName = "Software//ODBC//ODBC.INI//我的数据库";
if(RegDBKeyExist(szKeyName)<0) then
RegDBCreateKeyEx (szKeyName,"");
else
RegDBDeleteKey (szKeyName);
RegDBCreateKeyEx (szKeyName,"");
endif;
szKeyName = "Software//ODBC//ODBC.INI//ODBC Data Sources";
if(RegDBKeyExist(szKeyName)<0) then
RegDBCreateKeyEx (szKeyName,"");
endif;
RegDBSetKeyValueEx ( szKeyName, "我的数据库" , REGDB_STRING ,"Microsoft Access Driver (*.mdb)" , -1);
szPath = TARGETDIR^"student.mdb";
szKeyName = "Software//ODBC//ODBC.INI//我的数据库";
RegDBSetKeyValueEx ( szKeyName, "DBQ" , REGDB_STRING , szPath , -1);
RegDBSetKeyValueEx ( szKeyName, "Description" , REGDB_STRING , "用于VC++的数据源" , -1);
RegDBSetKeyValueEx ( szKeyName, "Driver" , REGDB_STRING , WINSYSDIR+"/odbcjt32.DLL" , -1);
RegDBSetKeyValueEx ( szKeyName, "DriverID" , REGDB_NUMBER , "25" , -1);
RegDBSetKeyValueEx ( szKeyName, "SafeTransactions" , REGDB_NUMBER ,"0" , -1);
RegDBSetKeyValueEx ( szKeyName, "UID" , REGDB_STRING ,"" , -1);
RegDBCreateKeyEx ("Software//ODBC//ODBC.INI//我的数据库 //Engines","");
RegDBCreateKeyEx ("Software//ODBC//ODBC.INI//我的数据库 //Engines//Jet","");
szKeyName = "Software//ODBC//ODBC.INI//我的数据库 //Engines//Jet";
RegDBSetKeyValueEx ( szKeyName, "Driver" , REGDB_STRING , WINSYSDIR+"/odbcjt32.DLL" , -1);
RegDBSetKeyValueEx ( szKeyName, "ImplicitCommitSync" , REGDB_STRING , "" , -1);
RegDBSetKeyValueEx ( szKeyName, "Threads" , REGDB_NUMBER , "3" , -1);
RegDBSetKeyValueEx ( szKeyName, "UserCommitSync" , REGDB_STRING , "Yes" , -1);
end;
绘制透明图片
{
COLORREF crOldBack=pDC->SetBkColor(RGB(255,255,255));
COLORREF crOldText=pDC->SetTextColor(RGB(0,0,0));
CDC dcImage, dcMask;
CBitmap bmp;
bmp.LoadBitmap(nResId);
bmp.GetBitmap(&bm);
int nWidth=bm.bmWidth, nHeight=bm.bmHeight;
//为图像及mask各创建一个DC
dcImage.CreateCompatibleDC(pDC);
dcMask.CreateCompatibleDC(pDC);
CBitmap* pOldBitmapImage=dcImage.SelectObject(&bmp);
//为“掩码”位图创建一个单色bitmap
CBitmap bitmapMask;
bitmapMask.CreateBitmap(nWidth, nHeight, 1, 1, NULL); //把mask位图装入mask DC
pDC->BitBlt(x, y, nWidth, nHeight, &dcMask, 0, 0, SRCAND);
pDC->BitBlt(x, y, nWidth, nHeight, &dcImage, 0, 0, SRCINVERT); //恢复原先设置
dcImage.SelectObject(pOldBitmapImage);
dcMask.SelectObject(pOldBitmapMask);
pDC->SetBkColor(crOldBack);
pDC->SetTextColor(crOldText);
}
动态加载BMP图片
m_bitmap = (HBITMAP)LoadImage(AfxGetInstanceHandle(),
"welcome.bmp",
IMAGE_BITMAP,
0,
LR_LOADFROMFILE );