登录 注册 找回密码 开启辅助访问 商业用户中心 购物车有0件商品 切换到宽版
搜索
查看: 2756|回复: 1
打印 上一主题 下一主题

[源码] [图像]图像控件PictCtrl

[复制链接]
跳转到指定楼层
楼主
发表于 2010-10-24 10:19:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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 为 整数型

回复

使用道具 举报

沙发
发表于 2010-10-24 18:46:42 | 只看该作者
支持   辛苦   谢谢
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表