C語(yǔ)言寫控制臺(tái)程序是無(wú)法加圖片的,只能用命令行輸出,最多就是設(shè)置下背景和字體,顏色之類的。如果開(kāi)發(fā)API窗口程序,完全依賴于操作系統(tǒng)的函數(shù)庫(kù)。C語(yǔ)言本身并不提供這類函數(shù)。
下面是windows系統(tǒng)下實(shí)現(xiàn)的函數(shù)代碼,第一個(gè)參數(shù)是圖片的存放的位置,第二個(gè)參數(shù)是窗口句柄。
HRESULTShowPic(char*lpstrFile,HWNDhWnd)
{
HDChDC_Temp=GetDC(hWnd);
IPicture*pPic;
IStream*pStm;
BOOLbResult;
HANDLEhFile=NULL;
DWORDdwFileSize,dwByteRead;
//打開(kāi)圖形文件
hFile=CreateFile(lpstrFile,GENERIC_READ,
FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
if(hFile!=INVALID_HANDLE_VALUE)
{
dwFileSize=GetFileSize(hFile,NULL);//獲取文件字節(jié)數(shù)
if(dwFileSize==0xFFFFFFFF)
returnE_FAIL;
}
else
{
returnE_FAIL;
}
//分配全局存儲(chǔ)空間
HGLOBALhGlobal=GlobalAlloc(GMEM_MOVEABLE,dwFileSize);
LPVOIDpvData=NULL;
if(hGlobal==NULL)
returnE_FAIL;
if((pvData=GlobalLock(hGlobal))==NULL)//鎖定分配內(nèi)存塊
returnE_FAIL;
ReadFile(hFile,pvData,dwFileSize,&dwByteRead,NULL);//把文件讀入內(nèi)存緩沖區(qū)
GlobalUnlock(hGlobal);
CreateStreamOnHGlobal(hGlobal,TRUE,&pStm);
//裝入圖形文件
bResult=OleLoadPicture(pStm,dwFileSize,TRUE,IID_IPicture,(LPVOID*)&pPic);
if(FAILED(bResult))
returnE_FAIL;
OLE_XSIZE_HIMETRIChmWidth;//圖片的真實(shí)寬度,單位為英寸
OLE_YSIZE_HIMETRIChmHeight;//圖片的真實(shí)高度,單位為英寸
pPic->get_Width(&hmWidth);
pPic->get_Height(&hmHeight);
//轉(zhuǎn)換hmWidth和hmHeight為pixels距離,1英寸=25.4毫米
intnWidth=MulDiv(hmWidth,GetDeviceCaps(hDC_Temp,LOGPIXELSX),2540);
intnHeight=MulDiv(hmHeight,GetDeviceCaps(hDC_Temp,LOGPIXELSY),2540);
//將圖形輸出到屏幕上(有點(diǎn)像BitBlt)
bResult=pPic->Render(hDC_Temp,0,0,nWidth,nHeight,0,hmHeight,hmWidth,-hmHeight,NULL);
hmHeight,NULL);
pPic->Release();
CloseHandle(hFile);//關(guān)閉打開(kāi)的文件
if(SUCCEEDED(bResult))
{
returnS_OK;
}
else
{
returnE_FAIL;
}
}