ActiveX控制元件之製作圖片屬性頁
本例可以通過屬性頁設定你的圖片(IPictureDisp)型別的屬性
1.新增Picture屬性(get/set methods,LPPICTUREDISP型別),新增成員變數CPictureHolder m_pic;
LPPICTUREDISP CToppCtrl::GetPicture()
{
// TODO: Add your property handler here
return m_pic.GetPictureDispatch();
return NULL;
}
void CToppCtrl::SetPicture(LPPICTUREDISP newValue)
{
// TODO: Add your property handler here
m_pic.SetPictureDispatch(newValue);
InvalidateControl();
SetModifiedFlag();
}
2.修改OnDraw
void CToppCtrl::OnDraw(
CDC* pdc, const CRect& rcBounds, const CRect& rcInvalid)
{
// TODO: Replace the following code with your own drawing code.
pdc->FillRect(&rcBounds, &CBrush(TranslateColor(m_color)));
m_pic.Render(pdc, rcBounds, rcBounds);
int nhei = 18;
int y = 2;
for(int i=0; i<m_saItems.GetSize(); i++, y+=nhei){
CRect rect(rcBounds.left + 4, y+2, rcBounds.right - 4, y + nhei);
pdc->FillRect(&rect, &CBrush(RGB(255, 255, 255)));
pdc->TextOut(rcBounds.left + 4, y + 2, m_saItems[i]);
}
}
3.修改DoPropExchange,新增"Picture"屬性的持久化
void CToppCtrl::DoPropExchange(CPropExchange* pPX)
{
ExchangeVersion(pPX, MAKELONG(_wVerMinor, _wVerMajor));
COleControl::DoPropExchange(pPX);
// TODO: Call PX_ functions for each persistent custom property.
PX_Color(pPX, "Color", m_color, TranslateColor(RGB(0, 0, 0)));
PX_Picture(pPX, _T("Picture"), m_pic);
PX_Items(pPX);
}
4.新建一對話方塊資源(OlePropertyPage型別,IDD_PROPPAGE_MYPIC),在上面新增兩按鈕("瀏覽","清除"),用 ClassWizard建立CMyPicPropPage(派生自COlePropertyPage),以後就開始編輯CMyPicPropPage這個 屬性頁類了。
5.新建字串資源IDS_MYPIC_PPG_CAPTION("圖片"),將之填入以下兩處,作為屬性頁打進標題(更改屬性頁的標題,就是簡單的更改相應字串資源的文字就可以了)
CMyPicPropPage::CMyPicPropPage() :
COlePropertyPage(IDD, IDS_MYPIC_PPG_CAPTION
{
//{{AFX_DATA_INIT(CMyPicPropPage)
// NOTE: ClassWizard will add member initialization here
// DO NOT EDIT what you see in these blocks of generated code !
//}}AFX_DATA_INIT
}
BOOL CMyPicPropPage::CMyPicPropPageFactory::UpdateRegistry(BOOL bRegister)
{
// TODO: Define string resource for page type; replace '0' below with ID.
if (bRegister)
return AfxOleRegisterPropertyPageClass(AfxGetInstanceHandle(),
m_clsid, IDS_MYPIC_PPG_CAPTION
else
return AfxOleUnregisterClass(m_clsid, NULL);
}
6.為CMyPicPropPage新增成員CPictureHolder m_pic,用來儲存屬性頁中的圖片(IPictureDisp)物件
7.新增兩個按鈕的響應函式,在OnButtonBrowser建立圖片物件(IPictureDisp),並儲存在m_pic中,在OnButtonClear中則刪除圖片物件。
void CMyPicPropPage::OnButtonBrowser()
{
// TODO: Add your control notification handler code here
CFileDialog dlg(TRUE, "所有檔案|*.*||");
if(dlg.DoModal() == IDOK){
CFile file;
if(file.Open(dlg.GetPathName(), CFile::typeBinary | CFile::modeRead)){
DWORD dwlen = file.GetLength();
HGLOBAL hMem = GlobalAlloc(GMEM_FIXED, dwlen);
file.Read((void*)hMem, dwlen);
file.Close();
LPSTREAM pstream;
CreateStreamOnHGlobal(hMem, TRUE, &pstream);
LPPICTUREDISP ppic = NULL;
OleLoadPicture(pstream, dwlen, TRUE, IID_IPictureDisp, (LPVOID*)&ppic);
if(ppic){
m_pic.SetPictureDispatch(ppic);
}
GlobalFree(hMem);
}
}
/* //需要#include "afxpriv2.h"
CFileDialog dlg(TRUE, "所有檔案|*.*||");
if(dlg.DoModal() == IDOK){
CFile file;
if(file.Open(dlg.GetPathName(), CFile::typeBinary | CFile::modeRead)){
DWORD dwlen = file.GetLength();
CArchive ar(&file, CArchive::load);
CArchiveStream stm(&ar);
LPSTREAM pstream = (LPSTREAM)&stm;
LPPICTUREDISP ppic = NULL;
OleLoadPicture(pstream, dwlen, TRUE, IID_IPictureDisp, (LPVOID*)&ppic);
if(ppic){
m_pic.SetPictureDispatch(ppic);
}
ar.Close();
file.Close();
}
}*/
}
void CMyPicPropPage::OnButtonClear()
{
// TODO: Add your control notification handler code here
m_pic.CreateEmpty();
}
8.新增WM_PAINT訊息響應函式,以在屬性頁上顯示所選的圖片
void CMyPicPropPage::OnPaint()
{
CPaintDC dc(this); // device context for painting
// TODO: Add your message handler code here
CRect rect;
GetClientRect(&rect);
rect.DeflateRect(10, 10, 200, 10);
m_pic.Render(&dc, rect, rect);
// Do not call COlePropertyPage::OnPaint() for painting messages
}
9.和控制元件產生關聯,在適當的時候載入控制元件的Picture屬性到m_pic在和儲存m_pic中的圖片到控制元件的Picture屬性:
void CMyPicPropPage::DoDataExchange(CDataExchange* pDX)
{
// NOTE: ClassWizard will add DDP, DDX, and DDV calls here
// DO NOT EDIT what you see in these blocks of generated code !
//{{AFX_DATA_MAP(CMyPicPropPage)
//}}AFX_DATA_MAP
if(pDX->m_bSaveAndValidate){
SetPic();
}
else{
GetPic();
}
DDP_PostProcessing(pDX);
}
void CMyPicPropPage::SetPic()
{
USES_CONVERSION;
COleDispatchDriver PropDispDriver;
ULONG nObjects = 0;
LPDISPATCH* ppDisp = GetObjectArray(&nObjects);
DISPID dwDispID;
LPCOLESTR lpOleStr = T2COLE("Picture");
ppDisp[0]->GetIDsOfNames(IID_NULL, (LPOLESTR*)&lpOleStr, 1, 0, &dwDispID);
PropDispDriver.AttachDispatch(ppDisp[0]);
PropDispDriver.SetProperty(dwDispID, VT_DISPATCH, m_pic.GetPictureDispatch());
PropDispDriver.DetachDispatch();
}
void CMyPicPropPage::GetPic()
{
USES_CONVERSION;
COleDispatchDriver PropDispDriver;
ULONG nObjects = 0;
LPDISPATCH* ppDisp = GetObjectArray(&nObjects);
DISPID dwDispID;
LPCOLESTR lpOleStr = T2COLE("Picture");
ppDisp[0]->GetIDsOfNames(IID_NULL, (LPOLESTR*)&lpOleStr, 1, 0, &dwDispID);
LPPICTUREDISP ppic = NULL;
PropDispDriver.AttachDispatch(ppDisp[0]);
PropDispDriver.GetProperty(dwDispID, VT_DISPATCH, (void*)&ppic);
PropDispDriver.DetachDispatch();
m_pic.SetPictureDispatch(ppic);
}
10.差點忘了一步了,因為是新建了一個屬性頁,不是用預設的屬性頁,所以得告訴控制元件,你有了哪兩個屬性頁了。
// TODO: Add more property pages as needed. Remember to increase the count!
BEGIN_PROPPAGEIDS(CToppCtrl, 2)
PROPPAGEID(CToppPropPage::guid)
PROPPAGEID(CMyPicPropPage::guid)
END_PROPPAGEIDS(CToppCtrl)
11.可以編譯執行進行測試了
剛知道可以插入圖片,試試
相關推薦
ActiveX控制元件之製作圖片屬性頁
本例可以通過屬性頁設定你的圖片(IPictureDisp)型別的屬性 1.新增Picture屬性(get/set methods,LPPICTUREDISP型別),新增成員變數CPictureHolder m_pic; LPPICTUREDISP CToppCtrl::G
Android自定義控制元件之區域性圖片放大鏡--BiggerView
零、前言: 本文的知識點一覽 1.自定義控制元件及自定義屬性的寫法,你也將對onMesure有更深的認識 2.關於bitmap的簡單處理,及canvas區域裁剪 3.本文會實現兩個自定義控制元件:FitImageView(圖片自適應)和BiggerView(放大鏡),前者為後者作為鋪墊。 4.最後會
伺服器控制元件之的onClick屬性
在之前的學習中,對於Html中的標籤中的onClick屬性,都是呼叫的是js中的方法,相應的,在html標籤中也是可以使用後臺程式碼中的方法的。 Login.aspx: <asp:But
【Android 開發】:UI控制元件之 ImageSwitcher 圖片切換控制元件的使用
1. ImageSwitcher 概要 1). ImageSwitcher 控制元件可以用在不同的影象之間切換,其中切換的過程可以採用動畫的方法,如淡入淡出的效果。 2). ImageSwitcher 需要一個影象工廠(ViewFactory)來建立用於顯示影象的Ima
C 之圖片框控制元件(PictureBox 常用屬性
BorderStyle:emun型,none表示無邊框;FixedSingle表示單線邊框;Fixed3D表示立體邊框。Image:在PictureBox上顯示的圖片,可在程式執行時用Image.FromFile函式載入SizeMode:emun型,表示圖片大小的顯示模式: Normal表示影象被置於空
C#之圖片框控制元件(PictureBox)常用屬性
BorderStyle:emun型,none表示無邊框;FixedSingle表示單線邊框;Fixed3D表示立體邊框。 Image:在PictureBox上顯示的圖片,可在程式執行時用Image.FromFile函式載入 SizeMode:emun型,表示圖片大小的顯示模
MFC 的ActiveX控制元件開發(屬性頁)
屬性頁 屬性頁使 ActiveX 控制元件使用者得以檢視和更改 ActiveX 控制元件屬性。可通過呼叫控制元件屬性對話方塊訪問這些屬性。該對話方塊包含一個或多個屬性頁,這些屬性頁提供自定義的圖形介面用於檢視和編輯控制元件屬性。 使用預設屬性頁 建立ActiveX控制元件專
使用Delphi,顯示ActiveX控制元件的屬性頁方法
unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, OleCtrls, MSCommLib_TLB, St
Qt 之 ActiveX控制元件跑官方例程記錄
目錄(?)[-] 開發環境 基礎知識瞭解 QT的ActiveX控制元件形式 in-process執行的ActiveX server控制元件 獨立執行的ActiveX server控制元件 開發環境 win7 64+QT
wpf自定義控制元件之依賴屬性
在wpf開發過程中,總會用到格式各樣的控制元件,但是原生控制元件遠遠不能滿足實際開發的需要,這時候wpf強大之處就能體現出來了。根據實際需求自定義各種不同的控制元件滿足不同的業務需求。 首先說需求吧: 一:根據某個bool值,控制一個圓形控制元件顯示或者不顯示某種顏色。 分析: 一:需
此頁上的ActiveX控制元件和本頁上的其他部分的互動可能不安全的解決辦法
寫在前面 最近的專案需要在Windows IE瀏覽器中進行互動操作,每次都會彈出“此頁上的ActiveX控制元件和本頁上的其他部分的互動可能不安全”的提示,詢問是否允許這種互動。雖是windows系統的一種保護機制,可以給互動帶來了麻煩。試過網上其他更改ie瀏覽
上傳控制元件選擇完圖片後將其立即顯示在頁面上(jquery ajax)
最近做了一個個人部落格系統,在新增修改“博主資訊”功能中有一項選擇頭像,用過<input type="file" />控制元件的都知道,選擇完圖片之後顯示的只是檔案的名字,而我想將圖片顯示在頁面上,初步的想法是選擇完圖片後提交到後臺,然後返回圖片的
基於ActiveX 控制元件開發動態Web頁
Web頁面的開發主要分為三類:靜態Web頁面、半動態Web頁面以及Client端動態頁面。本文重點論述基於ActiveX Control(控制元件)動態實時頁面的開發。 ActiveX控制元件用於Web的過程是將控制元件嵌入主頁中,使用者通過瀏覽器訪問該主頁時,將主頁中的控制元件下載,並在使用者機器上
【React Native開發】React Native控制元件之Image元件講解與美團首頁頂部效果例項(10)
轉載請標明出處:(一)前言 【好訊息】個人網站已經上線執行,後面部落格以及技術乾貨等精彩文章會同步更新,請大家關注收藏:http://www.lcode.org 今天我們一起來看一下Image元件的相關使用講解以及模仿實現一下美團首頁頂部分類的效果。具體環境搭建以及相關配置的請檢視之前
阻止IE彈出“在此頁上的 ActiveX 控制元件和本頁上的其他部份的互動可能不安全。你想允許這種互動嗎?”對話方塊
//在包含DllRegisterServer和DllUnregisterServer函式的cpp檔案中加入以下程式碼 //加入一個新的標頭檔案 #include <ObjSafe.h> //以下GUID為為當前使用的元件的GUID const GUID CDE
MFC在VS2010中為ActiveX控制元件新增屬性
ActiveX控制元件有四種屬性: (1)Stock:為每個控制元件提供的標準屬性,如字型或顏色。 (2)Ambient:圍繞控制元件的環境屬性——已被置入容器的屬性。這些屬性不能被更改,但控制元件可以使用它們調整自己的屬性。 (3)Extended:這些是由容器處
IOS開發之控制元件載入背景圖片
設定一般View的背景 UIImageView *imgView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"back-568h"]]; imgView.frame = self.view
MFC的ActiveX控制元件開發(屬性)
屬性 屬性是 ActiveX 控制元件中向所有容器公開的資料成員。與事件和方法類似,也分為常用屬性和自定義屬性。 常用屬性 常用屬性已由 COleControl 類實現。COleControl 類包含支援控制元件的通用屬性的預定義成員函式。某些通用屬性包括控制元件的標題以及
VS2012下製作ActiveX控制元件並新增到網頁
為了節省時間,大部分資源取自http://www.cnblogs.com/li-peng/p/3455247.html,感謝作者。 流程概覽 1.建立ActiveX控制元件——按鈕 2.定義一個介面,並在控制元件中實現 3.部署安裝 4.CAB打包 5.新增到
Android進階——Material Design新控制元件之TabLayout製作可滾動的Tabs頁面(二)
引言 上一篇總結講解了下TabLayout的基本特點、屬性和簡單的應用步驟,相信大家已經對於TabLayout已經不再陌生,這篇就結合Fragment+ViewPager的架構開發一個主流App的主要框架,進一步學習下TabLayout的操作和監聽,同時分享一