PictCtrl.Bas:
#引用 仅一次 "windows.bi"
#引用 "win\ole2.bi"
#引用 "win\olectl.bi"
#引用 "PictCtrl.bi"
声明 函数 DlgProc (传值 hWnd 为 HWND , 传值 uMsg 为 UINT , 传值 wParam 为 WPARAM , 传值 lParam 为 LPARAM)为 整数型
szPicture(0)="Img\ToolBox.bmp"
szPicture(1)="Img\bluehills.jpg"
szPicture(2)="Img\site_logo.gif"
DialogBoxParam(GetModuleHandle(NULL),转换类型(字符型 指针,IDD_DLG1),NULL,@DlgProc,NULL)
ExitProcess (0)
结束
函数 BitmapFromPicture ()为 HBITMAP
变量 tempDC 为 HDC
变量 tempBitmap 为 HBITMAP
变量 OldBitmap 为 HBITMAP
变量 dwWidth 为 整数型
变量 dwHeight 为 整数型
变量 compDC 为 HDC
变量 hmWidth 为 整数型
变量 hmHeight 为 整数型
变量 neghmHeight 为 整数型
compDC = GetDC (NULL)
tempDC = CreateCompatibleDC (compDC)
IPicture->get_Width(pIPicture,@hmWidth)
IPicture->get_Height(pIPicture,@hmHeight)
dwWidth = MulDiv(hmWidth,GetDeviceCaps(compDC,LOGPIXELSX),HIMETRIC_INCH)
dwHeight=MulDiv(hmHeight,GetDeviceCaps(compDC,LOGPIXELSY),HIMETRIC_INCH)
neghmHeight=-hmHeight
tempBitmap = CreateCompatibleBitmap (compDC , dwWidth , dwHeight)
OldBitmap = SelectObject (tempDC , tempBitmap)
IPicture -> Render(pIPicture,tempDC,0,0,dwWidth,dwHeight,0,hmHeight,hmWidth,neghmHeight,NULL)
SelectObject(tempDC,OldBitmap)
DeleteDC(tempDC)
ReleaseDC(NULL,compDC)
返回 tempBitmap
结束 函数
函数 LoadPict (传值 szPict 为 文本)为 HBITMAP
变量 hFile 为 HWND
变量 dwFileSize 为 整数型
变量 hGlobal 为 HGLOBAL
变量 pvData 为 HGLOBAL
变量 dwBytesRead 为 整数型
变量 bRead 为 BOOL
变量 hr 为 HRESULT
如果 hBmp 则
DeleteObject (hBmp)
hBmp = 0
结束 如果
hFile = CreateFile(szPict,GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,0,NULL)
如果 hFile <> INVALID_HANDLE_VALUE 则
dwFileSize = GetFileSize (hFile , NULL)
hGlobal = GlobalAlloc (GMEM_MOVEABLE , dwFileSize)
pvData = GlobalLock (hGlobal)
bRead = ReadFile(hFile,pvData,dwFileSize,@dwBytesRead,NULL)
GlobalUnlock (hGlobal)
CloseHandle (hFile)
hr = CreateStreamOnHGlobal(hGlobal,TRUE,@pIStream)
如果 pIStream 则
IStream = 转换类型(MyIStream 指针,读内存(DWORD,pIStream))
hr = OleLoadPicture(pIStream,dwFileSize,FALSE,@IID_IPicture,@pIPicture)
如果 pIPicture 则
IPicture = 转换类型 (MyIPicture 指针 , 读内存 (DWORD , pIPicture))
hBmp = BitmapFromPicture
IPicture -> Release (pIPicture)
结束 如果
IStream -> Release (pIStream)
结束 如果
GlobalFree (hGlobal)
返回 hBmp
结束 如果
返回 NULL
结束 函数
函数 DlgProc (传值 hWin 为 HWND , 传值 uMsg 为 UINT , 传值 wParam 为 WPARAM , 传值 lParam 为 LPARAM)为 整数型
变量 为 long id , 事件
变量 rect 为 RECT
判断 分支 uMsg
分支 WM_INITDIALOG
'
分支 WM_CLOSE
如果 hBmp 则
DeleteObject (hBmp)
结束 如果
EndDialog(hWin,0)
'
分支 WM_COMMAND
id = 取低十六位 (wParam)
事件 = 取高十六位 (wParam)
判断 分支 id
分支 IDC_BTN1
hBmp = LoadPict(szPicture(i))
SendDlgItemMessage(hWin,IDC_BTN2,BM_SETIMAGE,IMAGE_BITMAP,转换类型(LPARAM,hBmp))
i = (i + 1) 与 3
'
结束 判断
分支 WM_SIZE
GetClientRect (hWin , @rect)
MoveWindow(GetDlgItem(hWin,IDC_BTN2),0,0,rect.right,rect.bottom-40,TRUE)
MoveWindow(GetDlgItem(hWin,IDC_BTN1),rect.right-100,rect.bottom-35,97,31,TRUE)
'
分支 否则
返回 FALSE
'
结束 判断
返回 TRUE
结束 函数
PictCtrl.Bi
#定义 IDD_DLG1 1000
#定义 IDC_BTN1 1001
#定义 IDC_BTN2 1002
#定义 HIMETRIC_INCH 2540
类型 OLE_XSIZE_HIMETRIC 为 整数型
类型 OLE_YSIZE_HIMETRIC 为 整数型
类型 OLE_XPOS_HIMETRIC 为 整数型
类型 OLE_YPOS_HIMETRIC 为 整数型
类型 MyIPicture
QueryInterface 为 函数 (传值 为 任意 指针 , 传值 为 IID 指针 , 传值 为 PVOID 指针)为 HRESULT
AddRef 为 函数 (传值 为 任意 指针)为 ULONG
Release 为 函数 (传值 为 任意 指针)为 ULONG
get_Handle 为 函数 (传值 为 任意 指针 , 传值 为 OLE_HANDLE 指针)为 HRESULT
get_hPal 为 函数 (传值 为 任意 指针 , 传值 为 OLE_HANDLE 指针)为 HRESULT
get_Type 为 函数 (传值 为 任意 指针 , 传值 为 短整数型 指针)为 HRESULT
get_Width 为 函数 (传值 为 任意 指针 , 传值 为 OLE_XSIZE_HIMETRIC 指针)为 HRESULT
get_Height 为 函数 (传值 为 任意 指针 , 传值 为 OLE_YSIZE_HIMETRIC 指针)为 HRESULT
Render 为 函数 (传值 为 任意 指针 , 传值 为 HDC , 传值 为 整数型 , 传值 为 整数型 , 传值 为 整数型 , 传值 为 整数型 , 传值 为 OLE_XPOS_HIMETRIC , 传值 为 OLE_YPOS_HIMETRIC , 传值 为 OLE_XSIZE_HIMETRIC , 传值 为 OLE_YSIZE_HIMETRIC , 传值 为 RECT 指针)为 HRESULT
set_hPal 为 函数 (传值 为 任意 指针 , 传值 为 OLE_HANDLE)为 HRESULT
get_CurDC 为 函数 (传值 为 任意 指针 , 传值 为 HDC 指针)为 HRESULT
SelectPicture 为 函数 (传值 为 任意 指针 , 传值 为 HDC , 传值 为 HDC 指针 , 传值 为 OLE_HANDLE 指针)为 HRESULT
get_KeepOriginalFormat 为 函数 (传值 为 任意 指针 , 传值 为 BOOL 指针)为 HRESULT
put_KeepOriginalFormat 为 函数 (传值 为 任意 指针 , 传值 为 BOOL)为 HRESULT
PictureChanged 为 函数 (传值 为 任意 指针)为 HRESULT
SaveAsFile 为 函数 (传值 为 任意 指针 , 传值 为 任意 指针 , 传值 为 BOOL , 传值 为 LONG 指针)为 HRESULT
get_Attributes 为 函数 (传值 为 任意 指针 , 传值 为 PDWORD)为 HRESULT
结束 类型
变量 共享 pIPicture 为 整数型 指针
变量 共享 IPicture 为 MyIPicture 指针
变量 共享 IID_IPicture 为 GUID = (&H07BF80980,&H0BF32,&H0101A,{&H08B,&H0BB,&H000,&H0AA,&H000,&H030,&H00C,&H0AB})
类型 MyIStream
QueryInterface 为 函数 (传值 为 任意 指针 , 传值 为 IID 指针 , 传值 为 PVOID 指针)为 HRESULT
AddRef 为 函数 (传值 为 任意 指针)为 ULONG
Release 为 函数 (传值 为 任意 指针)为 ULONG
取数据 为 函数 (传值 为 任意 指针 , 传值 为 任意 指针 , 传值 为 ULONG , 传值 为 ULONG 指针)为 HRESULT
输出文本 为 函数 (传值 为 任意 指针 , 传值 为 任意 指针 , 传值 为 ULONG , 传值 为 ULONG 指针)为 HRESULT
读写位置 为 函数 (传值 为 任意 指针 , 传值 为 LARGE_INTEGER , 传值 为 DWORD , 传值 为 ULARGE_INTEGER 指针)为 HRESULT
SetSize 为 函数 (传值 为 任意 指针 , 传值 为 ULARGE_INTEGER)为 HRESULT
CopyTo 为 函数 (传值 为 任意 指针 , 传值 为 IStream 指针 , 传值 为 ULARGE_INTEGER , 传值 为 ULARGE_INTEGER 指针 , 传值 为 ULARGE_INTEGER 指针)为 HRESULT
Commit 为 函数 (传值 为 任意 指针 , 传值 为 DWORD)为 HRESULT
Revert 为 函数 (传值 为 任意 指针)为 HRESULT
LockRegion 为 函数 (传值 为 任意 指针 , 传值 为 ULARGE_INTEGER , 传值 为 ULARGE_INTEGER , 传值 为 DWORD)为 HRESULT
UnlockRegion 为 函数 (传值 为 任意 指针 , 传值 为 ULARGE_INTEGER , 传值 为 ULARGE_INTEGER , 传值 为 DWORD)为 HRESULT
Stat 为 函数 (传值 为 任意 指针 , 传值 为 STATSTG 指针 , 传值 为 DWORD)为 HRESULT
Clone 为 函数 (传值 为 任意 指针 , 传值 为 LPSTREAM 指针)为 HRESULT
结束 类型
变量 共享 pIStream 为 任意 指针
变量 共享 IStream 为 MyIStream 指针
变量 共享 hBmp 为 HBITMAP
变量 共享 szPicture (3)为 文本
变量 共享 i 为 整数型
|