第一篇:MFC控件關聯(lián)變量小結(jié)
MFC控件關聯(lián)變量總結(jié)
通常在要綁定變量的編輯框控件上右鍵添加變量就可以。
綁定變量分value和control兩種,value是賦值用的,control是控制用的。對于編輯框的賦值,共分幾種方法 1.不用綁定變量的方法
GetDlgItem(IDC_EDIT1)->GetWindowText(變量); 如果是數(shù)組->GetWindowText(數(shù)組名,長度)GetDlgItem(IDC_EDIT1)->SetWindowText(變量); 2.綁的是value型變量 一共3處
<1處>project1Dlg.h : 頭文件 class Cproject1Dlg : public CDialog { // 構(gòu)造 public: Cproject1Dlg(CWnd* pParent = NULL);// 標準構(gòu)造函數(shù)
// 對話框數(shù)據(jù)
enum { IDD = IDD_PROJECT1_DIALOG };protected: virtual void DoDataExchange(CDataExchange* pDX);// DDX/DDV 支持
// 實現(xiàn) protected: HICON m_hIcon;// 生成的消息映射函數(shù) virtual BOOL OnInitDialog();afx_msg void OnSysCommand(UINT nID, LPARAM lParam);afx_msg void OnPaint();afx_msg HCURSOR OnQueryDragIcon();DECLARE_MESSAGE_MAP()public: afx_msg void OnBnClickedOk();CString edit1;//定義了該變量 CString edit2;CEdit edit3;CEdit edit4;CString edit5;};<2處> project1Dlg.cpp : 實現(xiàn)文件
Cproject1Dlg::Cproject1Dlg(CWnd* pParent): CDialog(Cproject1Dlg::IDD, pParent), edit1(_T(“")), edit2(_T(”“)), edit5(_T(”")){ m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);}
參數(shù)列表跟了edit1 <3處> project1Dlg.cpp : 實現(xiàn)文件
void Cproject1Dlg::DoDataExchange(CDataExchange* pDX){ CDialog::DoDataExchange(pDX);DDX_Text(pDX, IDC_EDIT1, edit1);DDX_Text(pDX, IDC_EDIT2, edit2);DDX_Control(pDX, IDC_EDIT3, edit3);DDX_Control(pDX, IDC_EDIT4, edit4);DDX_Text(pDX, IDC_EDIT5, edit5);}
DDX_Text(pDX, IDC_EDIT1, edit1);變量與控件關聯(lián)
通過調(diào)用 UpdateData(TRUE)UpdateData(FALSE)將控件數(shù)據(jù)取到變量或?qū)⒆兞繑?shù)據(jù)顯到控件 如果 變量賦值語句寫在對話框構(gòu)造函數(shù)里,則UpdateData(FALSE)可省略,會被自動調(diào)用
3.綁的是control型變量 代碼與上方一樣,看edit3 但只有兩處涉及 CEdit edit3;DDX_Control(pDX, IDC_EDIT3, edit3);程序里只需要 edit3.GetWindowText(變量);edit3.SetWindowText(變量);就可以用了
除了賦值,還能干很多事情.
第二篇:Visual C++ 2010 MFC ActiveX 控件小結(jié)[推薦]
一、ActiveX控件
ActiveX控件是基于組件對象模型COM--Components Object Modem的可重用軟件組件,旨在用于普通的ActiveX控件容器和Internet上的網(wǎng)頁,這里介紹用MFC創(chuàng)建ActiveX控件。一個典型的ActiveX控件,具有方法、屬性、事件這三種特性。
二、ActiveX控件的測試與注冊
1、使用ActiveX控件測試容器對控件進行測試
對于VC6.0,安裝CommonTools目錄下的TSTCON32.EXE即可使用。
而vs2010中的TSTCON(ActiveX Control Test Container)工具非自動安裝,而是作為一個例程提供。所以應找到該例程,并編譯: 如vs2010安裝在默認路徑則
1, 進入:C:Program FilesMicrosoft Visual Studio 10.0Samples1033,可找到VC2010Samples.zip文件,2, 將其解決到同一個文件夾,解壓后將出現(xiàn)一個C++子文件夾。
3, TstCon例程在:C:Program FilesMicrosoft Visual Studio 10.0Samples1033C++MFColeTstCon,雙擊其中的.sln文件啟動工程,直接編譯,4, 編譯后在Debug子文件夾中將出現(xiàn)一個TstCon.exe文件,將其復制到:C:Program FilesMicrosoft Visual Studio 10.0Common7Tools文件夾。
5, 在vs2010中的Tools菜單點擊“External Tools...”,出現(xiàn)如下對話框,點擊“Add”添加一項工具。6, 新工具項的“Title”為:ActiveX Control Test Container,“Command” 為:C:Program FilesMicrosoft Visual Studio 10.0Common7Tools TstCon.exe。
7, 確認退出對話框,Tools菜單將出現(xiàn)“ActiveX Control Test Container”菜單項。Visual C++ 2010 MFC ActiveX 控件小結(jié)Captain棟蟈 打開控件測試容器初始界面如下圖
Visual C++ 2010 MFC ActiveX 控件小結(jié)Captain棟蟈 Edit→Insert New Control→選擇要測試的控件→OK
2、ActiveX控件的注冊與刪除
所有的ActiveX控件必須在注冊之后才能使用,實際上在VS2010開發(fā)環(huán)境中生成控件程序時,就已經(jīng)通過regsvr32程序注冊了該控件;如果要刪除ActiveX控件的注冊信息,利用regsvr32程序的/u選項來完成。通常可以選擇“開始”→“運行”命令,然后輸入“regsvr32/u”,再在其后輸入要刪除的ActiveX控件的完整路徑。Tips:在“運行”中先輸入regsvr32/u,然后拖動要刪除的控件到“regsvr32/u”之后,即可獲取其完整路徑。
將xxx.ocx文件拷貝至Windowssystem下,然后regsvr xxx.ocx即注冊;regsvr32/u xxx.ocx即刪除。
三、ActiveX控件開發(fā)完整過程 經(jīng)典Clock控件案例~~
1、創(chuàng)建工程
創(chuàng)建MFC ActiveX Control類項目,命名為Clock,MFC ActiveX Control Wizard全選默認,F(xiàn)inish。
2、時鐘控件的實現(xiàn)
獲取當前系統(tǒng)時間,CClockCtrl類的OnDraw函數(shù)中 CTime time=CTime::GetCurrentTime();CString str=time.Format(“%H:%M:%S”);pdc->TextOut(0,0,str);動態(tài)顯示時間,CClockCtrl類添加WM_CREATE和WM_TIMER消息及處理函數(shù) 設置定時器SetTimer(1,1000.NULL);定時器相應函數(shù)InvalidateControl();//其實就是調(diào)用OnDraw函數(shù)
編譯并運行ActiveX控件,然后打開ActiveX控件容器中插入該控件,可以看到動態(tài)顯示的時間
3、屬性 3.1標準屬性
以背景色和前景色為例,類視圖中展開Lib結(jié)尾的選項,右鍵“_DClock”→“添加”→“屬性”,然后添加標準屬性,及選中“Stock”,在PropertyName中選則BackColor,其余選中默認,單擊完成。同理添加前景色ForeColor。
為屬性對話框添加“顏色”選項卡,修改類CClockCtrl.cpp中的屬性頁映射宏PROPPAGEID(CLSID_CColorPropPage);切記計數(shù)參數(shù)要增加1: // 屬性頁
// TODO: 按需要添加更多屬性頁。請記住增加計數(shù)!BEGIN_PROPPAGEIDS(CClockCtrl, 2)
PROPPAGEID(CTimePropPage::guid)
PROPPAGEID(CLSID_CColorPropPage);END_PROPPAGEIDS(CClockCtrl)然后在修改OnDraw函數(shù)使控件顏色根據(jù)顏色選項卡的選則而變化:
CBrush brush(TranslateColor(GetBackColor()));
pdc->FillRect(rcBounds,&brush);
pdc->SetBkMode(TRANSPARENT);
pdc->SetTextColor(TranslateColor(GetForeColor()));3.2自定義屬性
添加一個自定義屬性:時間間隔(UpdateInterval),用于設置更新時間的間隔。
與標準屬性添加相同,在添加屬性向?qū)е校赑ropertyName中輸入UpdateInterval,類型設置為SHORT。可以看到向?qū)ё詣犹砑恿送ㄖ瘮?shù)OnUpdateIntervalChange(),單擊Finish完成添加。void CClockCtrl::OnUpdateIntervalChanged(void){
AFX_MANAGE_STATE(AfxGetStaticModuleState());
// TODO: 在此添加屬性處理程序代碼
if(m_UpdateInterval<1000 || m_UpdateInterval>6000)
{
//解決輸入值不合要求的問題
m_UpdateInterval=1000;
}
else
{
//解決輸入值不是整數(shù)的問題
m_UpdateInterval=m_UpdateInterval/1000*1000;
}
KillTimer(1);
SetTimer(1,m_UpdateInterval,NULL);
SetModifiedFlag();} 關聯(lián)某控件變量,需要手動添加:
DDP_Text(pDX, IDC_EDIT1, m_updateInterval,_T(“Interval”));DDX_Text(pDX, IDC_EDIT1, m_updateInterval);DDP_PostProcessing(pDX);DDP、DDX、PostProcessing,順序不可以調(diào)整
為測試自定義屬性,在Edit→Insert New Control→選擇要測試的控件后,選擇Control→Invoke Methods,如果想要獲取,某個屬性值,則選擇PropGet;如果設置,則選PropPut。這里選擇后者,然后輸入2000,單擊SetValue,在單擊【Invoke】按鈕,發(fā)現(xiàn)控件時間每個2S更新一次。
4、方法
與添加屬性一樣,_DClock右鍵......選擇“方法”,這里添加一個簡單的“Hello” 代碼:
void CClockCtrl::Hello(void){
AFX_MANAGE_STATE(AfxGetStaticModuleState());
// TODO: 在此添加調(diào)度處理程序代碼
MessageBox(_T(“Hello world”));} 測試時Control→Invoke Methods,選擇“Hello”
5、事件
5.1添加標準事件
右鍵CClockCtrl類(類視圖CxxxCtrl上點擊右鍵才能添加事件,而在_DxxxEvents接口上點擊右鍵則沒有添加事件),添加“事件”,顯示添加事件向?qū)υ捒颍癊vent Name”下拉列表框中選擇”Click“,單擊Finish。5.2添加自定義事件
添加一個NewMinute事件,實現(xiàn)新的一分鐘時有提示 Event Name中輸入NewMinute,然后Finish。在InDraw函數(shù)中獲取系統(tǒng)時間代碼后添加 if(time.GetSecond()==0)
{
NewMinute();//判斷是否過了一分鐘,是則觸發(fā)NewMinute事件
}
6、調(diào)用ActiveX控件
新建一個名為ClockTest的對話框,在對話框上右鍵,選擇”Insert ActiveX Control“,找到Clock控件添加即可。
或者是,”工具“→”選擇工具箱選項“→”COM Components“,選擇要插入的控件,單擊OK。
第三篇:MFC動態(tài)添加控件及響應函數(shù)
MFC動態(tài)添加控件及響應函數(shù)
應該注意:控件也是一個窗口。在添加控件的時候空間變量最好是全部變量或者是局部指針變量,這樣即使函數(shù)結(jié)束也不會造成變量被銷毀。下面以動態(tài)添加按鈕為例的代碼: ? CButton *pButton = new CButton;//一定要New CButton,否則程序會運行出錯? pButton->Create(“New Button”, WS_CHILD|BS_DEFPUSHBUTTON, CRect(0, 0, 100,50), this, 123);
? pButton->ShowWindow(SW_SHOW);
或者是如下代碼:
? CButton *pButton = new CButton;//一定要New CButton,否則程序會運行出錯? pButton->Create(“New Button”, WS_CHILD|BS_DEFPUSHBUTTON|WS_VISIBLE, CRect(0, 0, 100, 50), this, 123);
根據(jù)MFC的消息映射機制,應該更改三處代碼。
?(1)在頭文件中修改代碼
? 在protected的注釋宏中間添加函數(shù)聲明:
? protected:
? //{{AFX_MSG(CDemoMDIView)
?? afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
?? afx_msg void OnNewButton(void);
?? //}}AFX_MSG
??(2)在cpp文件中添加消息聲明
?? BEGIN_MESSAGE_MAP(CDemoMDIView, CView)
?? //{{AFX_MSG_MAP(CDemoMDIView)
?? ON_WM_CREATE()
?? //}}AFX_MSG_MAP
?? // Standard printing commands
?? ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)
?? ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)
?? ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)?? //參數(shù)依次為控件ID、響應函數(shù)名稱
?? ON_BN_CLICKED(123, OnNewButton)
?? END_MESSAGE_MAP()
??(3)在cpp文件中添加函數(shù)代碼
?? voidCDemoMDIView::OnNewButton(void)
?? {
?? MessageBox(“This is a new button!nThis Function Handler was added manually!”);?? }
第四篇:GridControl控件小結(jié)
由于近期要使用gridcontrol控件,整理出來,以便以后參考:
1.DevExpress控件組中的GridControl控件不能使橫向滾動條有效。現(xiàn)象:控件中的好多列都擠在一起,列寬都變的很小,根本無法正常瀏覽控件單元格中的內(nèi)容。
解決:
gridView1.OptionsView.ColumnAutoWidth屬性是true,即各列的寬度自動調(diào)整,你把它設成false,就會出現(xiàn)了。
2.使單元格不可編輯。
gridcontrol-->gridview-->OptionsBehavior-->Editable=false
3.沒有下拉滾動條事件怎么辦?現(xiàn)象:因為需要加載大數(shù)據(jù)量數(shù)據(jù),所以不能一次把所有數(shù)據(jù)讀入datatable進行綁定,所以決定在用戶進一步瀏覽數(shù)據(jù)時進行數(shù)據(jù)的實時加載工作,就是每當用戶拉動滾動條時,多加載一些數(shù)據(jù)進入datatable.沒有找到合適的滾動條事件,于是用這個事件代替了,非常合適我的需求.TopRowChanged事件.4.獲取選定行,指定列單元格的內(nèi)容
private string GetSelectOID()
{
int[] pRows = this.gridView1.GetSelectedRows();
if(pRows.GetLength(0)> 0)
return gridView1.GetRowCellValue(pRows[0], mOIDFiledName).ToString();
else
return null;
}
//mOIDFiledName為要獲取列的列名
5.去除“Drag a Column Header Here To Group by that Column”
屬性Gridview->Option View->Show Group Panel=false,就好了
6.在gridcontrol中添加checkbox復選框
gridview->run designer->columns->選擇要變成復選框的那一列->column edit->new(在這里可以選擇很多類型)
加載checkbox數(shù)據(jù)時,費了一點時間,checkbox的復選框怎么點擊,一失去焦點是,選擇的操作就無效了,問題就出在datatable的綁定上了,一定要綁定一個布爾的類型.代碼是這樣滴!
private void FrmCreateLegend_Load(object sender, EventArgs e)
{
IFeatureLayer pFeatureLayer;
IDataset pDataset;
string pName;
DataTable pDatatable = new DataTable();
pDatatable.Columns.Add(“圖層名稱”, System.Type.GetType(“System.String”));pDatatable.Columns.Add(“選擇”, System.Type.GetType(“System.Boolean”));
DataRow pDataRow;
object[] rowArray = new object[2];
for(int i = 0;i < mFeatureLayers.Count;i++)
{
pDataRow = pDatatable.NewRow();
pFeatureLayer = mFeatureLayers[i] as IFeatureLayer;
rowArray[0] = pFeatureLayer.Name;
rowArray[1] = false;
pDataRow.ItemArray = rowArray;
pDatatable.Rows.Add(pDataRow);
}
this.gridMark.DataSource = pDatatable;
this.gridMark.Refresh();
}
注意:創(chuàng)建的datatable的列名一定要和gridview中的列的fieldname屬性值是一個名字,不然,你會發(fā)現(xiàn)添加了和你綁定的datatalbe一樣多的行,可是行里面卻沒有內(nèi)容的.7.多選
GridControl->GridView->屬性->OptinosSelecttion->MultiSelect
8.不顯示子表信息
當我們對DataTable建立父子關系后,將父表綁定在Grid上,會造成關系列上有加號顯示,并且可以展開.如果你覺得展開的信息對你沒有意義的話,是可以關掉的.這是需要修改屬性 屬性Gridview->Option View->ShowDetailButtons=false
bandedGridView1.Columns[1].Width =
bandedGridView1.CalcColumnBestWidth(bandedGridView1.Columns[1])+ 5;
bandedGridView1.Columns[2].Width =
bandedGridView1.CalcColumnBestWidth(bandedGridView1.Columns[2])+ 5;
bandedGridView1.Columns[3].Width =
bandedGridView1.CalcColumnBestWidth(bandedGridView1.Columns[3])+ 5;
bandedGridView1.Columns[0].Width
bandedGridView1.CalcColumnBestWidth(bandedGridView1.Columns[0])+ 5;=
第五篇:MFC CString 用法小結(jié)[定稿]
MFC CString 用法小結(jié)
1.初始化方法:
(1)直接復制,如Cstring=”mingrisoft”;
(2)通過構(gòu)造函數(shù)初始化,如 CString str(? ?,100)//與分配100個字節(jié),填充空格 char* p=”feiqiang”;Cstring(p);delete p.(3)加載工程中的字符串資源,如CString str;str.LoadString(IDS_STR);(4)使用CString類的成員函數(shù)Format初始化,如CString str;int i=0;str.Format(“value:%d”,i);
2.將CString轉(zhuǎn)化為char*,如
CString str=”feqiang”;
char *p;p=str.GetBuffer();delete p;將char*轉(zhuǎn)化為CString,如:
char* p=”feiqiang”;
p[len(p)]=? 主站蜘蛛池模板: 亚洲熟妇色xxxxx欧美老妇y| 久久精品中文闷骚内射| 国产aⅴ爽av久久久久电影渣男| 亚洲国产精品一区二区久久hs| 激情综合五月丁香亚洲| 成人无码av片在线观看| 久久在精品线影院| 黄又色又污又爽又高潮动态图| 国产免费又爽又色又粗视频| 国产精品毛片在线完整版| 亚洲永久网址在线观看| 美女视频黄的全免费视频网站| 日本高清色倩视频在线观看| 色偷偷色噜噜狠狠网站年轻人| 亚洲精品成人av观看| 97一期涩涩97片久久久久久久| 色婷婷六月亚洲婷婷丁香| 午夜成人片在线观看免费播放| 丝袜人妻一区二区三区| 久久午夜无码鲁丝片午夜精品| 成人片黄网站色大片免费毛片| 男女性高爱潮是免费国产| 亚洲精品国产av成拍色拍| 无码伊人66久久大杳蕉网站谷歌| 久99久热只有精品国产女同| 久久精品国内一区二区三区| 色综合久久88色综合天天| 国产亚洲美女精品久久久2020| 亚洲成av人片不卡无码手机版| 亚洲三区在线观看无套内射| 亚洲熟妇自偷自拍另类| 国产无遮挡裸体免费直播| 亚洲 综合 欧美 动漫 丝袜| 五月丁香六月激情综合在线视频| 海角社区在线视频播放观看| 国产亚洲产品影市在线产品| 国产成+人+综合+欧美亚洲| 无码人妻精品一区二区三区免费| 色偷偷亚洲精品一区二区| 少妇高潮喷潮久久久影院| 人妻无码手机在线中文|