CDockablePane的使用方法及消除关闭按钮

合集下载

MFC浮动窗口使用方法和注意事项

MFC浮动窗口使用方法和注意事项

MFC浮动窗⼝使⽤⽅法和注意事项使⽤VS2008+SP1创建悬浮窗⼝的步骤:1. 创建悬浮窗⼝类每⼀个悬浮窗⼝都是⼀个CDockablePane的派⽣类的对象, 因此要为每⼀个悬浮窗⼝创建⼀个新类1.1 添加类通过菜单Project->Add Class...或者在类视图中⼯程名字处右键选择Add->Class...添加类选择MFC Class, 点Add按钮进⼊下⼀步Class name处写⼊新类的名字, 这⾥⽤CDock, 选择Base class为CDockablePane按Finish按钮, 添加类完成.1.2 添加消息处理函数⼀般⾄少要处理两个消息, ⼀个是WM_CREATE, ⼀个是WM_SIZE, 具体步骤为:(1) 头⽂件中添加函数声明(函数名及参数不可写错)protected:afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);afx_msg void OnSize(UINT nType, int cx, int cy);(2) cpp⽂件中添加消息映射BEGIN_MESSAGE_MAP(CDock, CDockablePane)ON_WM_CREATE()ON_WM_SIZE()END_MESSAGE_MAP()这⾥BEGIN_MESSAGE_MAP和END_MESSAGE_MAP宏都是⾃动⽣成的, 只需要添加中间两⾏代码即可(3) 添加函数实现部分int CDock::OnCreate(LPCREATESTRUCT lpCreateStruct){if (CDockablePane::OnCreate(lpCreateStruct) == -1)return -1;// 在这⼉创建控件return 0;}void CDock::OnSize(UINT nType, int cx, int cy){CDockablePane::OnSize(nType, cx, cy);// 这⼉添加代码}1.3 添加控件现在创建的CDock类中由于没有任何控件, 因此如果现在创建该类的对象并显⽰, 该区域中由于全是垃圾数据, 故可能该窗⼝显⽰时为花屏. 如果程序运⾏期间出现类似花屏的问题, ⼤概会有⼏种可能性: 1. 没有创建控件 2. 已创建控件, 但控件位置不对或未覆盖整个的dockablePane 3. 控件虽然占据整个区域, 但不能⾃动刷新这⾥以添加⼀个listBox为例:(1) 在类的头⽂件中添加控件对象, 代码为:protected:CListBox _listBox;(2) 在OnCreate()中添加创建控件窗⼝的代码:这⾥必须要注意, 需要先调⽤基类的函数OnCreate()int CDock1::OnCreate(LPCREATESTRUCT lpCreateStruct){if (CDockablePane::OnCreate(lpCreateStruct) == -1)return -1;// 在这⼉创建控件// nID为该控件的ID, 可以⾃⾏设置, 如果对ID不感兴趣, 也可以选择传递0让系统做处理if (!_listBox.Create(WS_CHILD | WS_VISIBLE, CRect(0, 0, 0, 0), this, nID)){TRACE0("创建listbox失败");return -1;}return 0;}(3) 在OnSize中设置各个控件的位置这⾥要注意的是, 需要将控件布满整个窗⼝. 这⾥只有⼀个listBox, 故可以直接⽤listBox覆盖窗⼝.同理, 必须要先调⽤基类函数CDockablePane::OnSize(nType, cx, cy)void CDock::OnSize(UINT nType, int cx, int cy){CDockablePane::OnSize(nType, cx, cy);// 这⼉添加代码if (GetSafeHwnd() == NULL){return;}if (_listBox.GetSafeHwnd() != NULL){CRect rectClient;GetClientRect(rectClient);_listBox.SetWindowPos(NULL, rectClient.left, rectClient.top, rectClient.Width(), rectClient.Height(), SWP_NOACTIVATE | SWP_NOZORDER);}}2. 在程序中添加悬浮窗⼝对象上⾯⼀步只是给⼯程添加了⼀个悬浮窗⼝类, 但并没⽣成该类的实例. 这⾥创建该实例(在CMainFrame类中)2.1 在主框架类声明中添加对象, 代码为:protected:CDock m_wndDock;2.2 创建dockablePane的窗⼝, 在主框架的OnCreate()函数中(注: 这⾥我建议在OnCreate函数中⾃动⽣成代码EnableAutoHidePanes(CBRS_ALIGN_ANY)的后⾯添加)int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct){...EnableAutoHidePanes(CBRS_ALIGN_ANY);// 利⽤这⾥的CBRS_RIGHT来设置最初的窗⼝停靠的位置, 可以的取值是// CBRS_NOALIGN, CBRS_LEFT, CBRS_TOP, CBRS_RIGHT, CBRS_BOTTOMDWORD style = WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | CBRS_RIGHT |CBRS_FLOAT_MULTI;if (!wndDock1.Create(// 该dock窗⼝的标题(如果可以有的话...)_T("Dock1"),// 该dock窗⼝的parent, 设置为thisthis,// 窗⼝的⼤⼩, 注意是"悬浮"的情况下的⼤⼩, 处于dock状态时⼤⼩与该值⽆关CRect(0, 0, 200, 200),// 该dock窗⼝是否有标题, 如果为FALSE, 则第⼀个字符串参数显⽰不出来TRUE,// 该dock窗⼝的ID值. 注意: 如果希望dock窗⼝的状态可以保存在注册表中(这样下次启动程序时仍保持该状态), 则该值必须的唯⼀的nID,//style)){return FALSE;}...}2.3去掉CDockablePane的Close按钮?⽅法⼀:在继承CDockablePane的类中重写CanBeClosed()⽅法:virtual BOOL CanBeClosed() const; ... BOOL COutputWnd::CanBeClosed() const { return FALSE;}⽅法⼆:if (!m_wndView.Create(strFileView, this, CRect(0, 0, 250, 200), TRUE, ID_VIEW_VIEW,WS_CHILD | WS_VISIBLE | CBRS_LEFT | CBRS_HIDE_INPLACE | WS_CAPTION, AFX_CBRS_REGULAR_TABS, AFX_CBRS_RESIZE))在Create的时候后⾯加上这样的参数设置AFX_CBRS_REGULAR_TABS, AFX_CBRS_RESIZE 就不会有那个关闭按钮了2.4显⽰隐藏CDockablePanem_wndFileView.ShowPane(TRUE,FALSE,TRUE);//显⽰m_wndFileView.ShowPane(FALSE,FALSE,TRUE);//隐藏2.5 给悬浮窗⼝添加icon, 暂时省略.3. 设置窗⼝悬浮⽅式, 令窗⼝悬浮3.1 设置窗⼝悬浮位置这部分代码也应该在MainFrame类的OnCreate函数中, ⽽且紧跟创建悬浮窗⼝的后⾯.设置悬浮位置只需要调⽤CDockablePane::EnableDocking即可m_wndDock.EnableDocking(CBRS_ALIGN_ANY);其中, 参数可以是CBRS_ALIGN_TOP, CBRS_ALIGN_RIGHT, CBRS_ALIGN_BOTTOM, CBRS_ALIGN_ANY3.2 令窗⼝悬浮欲使⼀个CDockablePane对象悬浮, 只需要调⽤框架类的DockPane函数即可:DockPane(&m_wndDock);但是若有另外⼀个悬浮窗⼝的对象需要和m_wndDock在⼀起显⽰, 构成⼀个组(就像VS的资源视⼒和类视图), 那么第⼆个悬浮窗⼝需要使⽤CDockablePane类的AttchToTabWnd函数, 代码如下:DockPane(&m_wndDock);CDockablePane *pTabbedBar = NULL;m_wndDock2.AttachToTabWnd(&m_wndDock, DM_SHOW, FALSE, &pTabbedBar);CDockablePane 使⽤这个是转载的int m_nshowCurrent;m_nshowCurrent=theApp.GetProfileInt(_T("Workspace//Pane-377"),_T("IsFloating"),0); //在构造函数中⾸先派⽣两个⼦类,源码就不⽤写出来了,占篇幅,在MainFrm⾥申明如:CCurrentDockablePane m_wndCurrentDockablePane;CHistoryDockablePane m_wndHistoryDockablePane;CDockablePane* m_pTabbedBar;然后在OnCreate()⾥⾯:CString strHistoryDockablePane;CString strCurrentView;strCurrentView.LoadString(IDS_Current_VIEW);strHistoryDockablePane.LoadString(IDS_History_VIEW);if (!m_wndHistoryDockablePane.Create(strHistoryDockablePane, this, CRect(0, 0, 200, 200),TRUE, ID_VIEW_HistoryDockablePane, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | CBRS_LEFT | CBRS_FLOAT_MULTI)){TRACE0("Failed to create Class View window/n");return FALSE; // failed to create}if (!m_wndCurrentDockablePane.Create(strCurrentView, this, CRect(0, 0, 200, 200),TRUE, ID_VIEW_CurrentView, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | CBRS_LEFT|CBRS_FLOAT_MULTI)){TRACE0("Failed to create File View window/n");return FALSE; // failed to create}再给她们添加图标:HICON hHistoryDockablePaneIcon = (HICON) ::LoadImage(::AfxGetResourceHandle(),MAKEINTRESOURCE(bHiColorIcons ? IDI_history : IDI_history), IMAGE_ICON, ::GetSystemMetrics(SM_CXSMICON),::GetSystemMetrics(SM_CYSMICON), 0);m_wndHistoryDockablePane.SetIcon(hHistoryDockablePaneIcon, FALSE);HICON hCurrentViewIcon = (HICON) ::LoadImage(::AfxGetResourceHandle(),MAKEINTRESOURCE(bHiColorIcons ? IDI_Currrently : IDI_Currrently), IMAGE_ICON, ::GetSystemMetrics(SM_CXSMICON),::GetSystemMetrics(SM_CYSMICON), 0);m_wndCurrentDockablePane.SetIcon(hCurrentViewIcon, FALSE);m_wndHistoryDockablePane.EnableDocking(CBRS_ALIGN_ANY);m_wndCurrentDockablePane.EnableDocking(CBRS_ALIGN_ANY);DockPane(&m_wndHistoryDockablePane);DockPane(&m_wndCurrentDockablePane);m_pTabbedBar = NULL;m_wndCurrentDockablePane.AttachToTabWnd(&m_wndHistoryDockablePane, DM_SHOW, FALSE, &m_pTabbedBar);相关显⽰代码就这样的了.后来⽼⼤说关闭需要修改⼯具栏⾥的显⽰状态,即去掉对勾.在⼯具栏⾥控制他们的显⽰和隐藏简单啊,就是⽤m_wndCurrentDockablePane.ShowPane(TRUE,FALSE,TRUE);可是关闭再去修改⼯具栏想了半天,以为要重载CDockablePane的Close()消息,⼜尝试了他的很多消息,都不对.跟踪进去才知道是调⽤MainFrm来关闭的.⾥⾯有pMainfrm.onCloseDockingPane(this);好了,我就重载这个⽅法.BOOL CMainFrame::OnCloseDockingPane( CDockablePane* pWnd ){CWnd * pfWnd = pWnd->GetFocus();if (*pfWnd == m_wndCurrentDockablePane){m_nshowCurrent = 0;}else if(*pfWnd == m_wndHistoryDockablePane){m_nshowHistory = 0;}return TRUE;}这样⼯具栏⾥⾯的信息就更新了.呵呵,⾼兴的太早了,才做了⼀半,当两个⾯板拆开,即处于浮动状态时关闭根本就不调⽤这⾥.⼜郁闷了半天,还是⽼⼤⽜逼,说那种情况是OnCloseMiniFrame,于是有如下重载:BOOL CMainFrame::OnCloseMiniFrame( CPaneFrameWnd* pWnd ){CWnd *ptWnd = pWnd->GetWindow( GW_CHILD );if (*ptWnd ==m_wndCurrentDockablePane){m_nshowCurrent = 0;}else if (*ptWnd == m_wndHistoryDockablePane){m_nshowHistory = 0;}return TRUE;}//写注册表,在析构函数中theApp.WriteProfileInt(_T("Workspace//Pane-377"),_T("IsFloating"),m_nshowCurrent);。

关于OnOK()、OnCancel()、OnClose()、OnDestroy() 模式对话框

关于OnOK()、OnCancel()、OnClose()、OnDestroy() 模式对话框

关于OnOK()、OnCancel()、OnClose()、OnDestroy() 模式对话框总结OnOK()、OnCancel()、OnClose()、OnDestroy()之间的区别(转)2009年09月22日下午08:33第一,OnOK()和OnCancel()是CDialog基类的成员函数,而OnClose()和OnDestroy()是CWnd基类的成员函数,即WM消息响应函数。

从应用程序结构的角度,拿对话框来说,红色的X对应的是CWnd,而处于对话框中的“确定”、“取消”按钮则对应了CDialog。

第二,OnClose()和OnDestroy()在单视图程序中,根据<<深入浅出MFC>>所讲,程序退出时执行的操作顺序为(从点X按钮开始)(1)用户点击X退出按钮,发送了WM_CLOSE消息----->响应OnClose()(2)在WM_CLOSE消息的处理函数中,调用DestroyWindow()----->销毁与指定CWnd窗口对象关联的窗口,但未销毁CWnd对象(3)在DestroyWindow()中发送了WM_DESTROY消息----->窗口销毁后响应OnDestroy()(4)在WM_DESTROY消息中调用PostQuitMessage(),发送WM_QUIT消息,结束消息循环可以看到,程序的退出过程,是先响应OnClose(),然后响应OnDestroy(),在响应OnDestroy()之前,窗口对象已经被销毁。

OnDestroy()到底干了什么呢?它就像一个teller,先通知CWnd 对象告诉它即将被销毁,尔后OnDestroy的真正运行是在CWnd对象已经从屏幕上清除以后被调用的。

第三,OnOK()、OnCancel()()、OnClose()、OnDestroy()CDialog::OnOK首先调用UpdateData(TRUE)将数据传给对话框成员变量,然后调用CDialog::EndDialog关闭对话框;CDialog::OnCancel只调用CDialog::EndDialog关闭对话框;OnClose()是响应WM_CLOSE 的.一定程度上可以说CDialog::EndDialog()和OnClose()完成类似的工作,但处理的机制不一样,前者是CDialog的对象机制,后者是WM 的消息映射机制。

el-tabs最中closable方法

el-tabs最中closable方法

el-tabs最中closable方法全文共四篇示例,供读者参考第一篇示例:el-tabs是一个常用的Vue组件,用于制作选项卡页签。

el-tabs提供了许多方便的方法和属性,其中一个非常有用的方法就是最中closable方法。

本文将介绍el-tabs最中closable方法的用法和作用。

让我们来了解一下el-tabs组件的基本用法和结构。

el-tabs组件是一个容器组件,包含多个el-tab-pane子组件,每个el-tab-pane代表一个选项卡页签。

用户可以通过点击不同的选项卡来切换内容。

el-tabs组件提供了许多属性用于定制化样式和功能,其中一个常用的属性就是closable。

closable属性用于设置选项卡是否可关闭,如果设置为true,则选项卡右侧会出现一个关闭按钮,用户可以点击该按钮来关闭选项卡。

但是有时候我们需要在特定的情况下控制选项卡是否可关闭,这时就可以使用最中closable方法。

最中closable方法是一个回调函数,接收一个参数tab,表示当前要关闭的选项卡。

我们可以在最中closable方法中对tab进行判断,决定是否关闭选项卡。

下面我们来看一个简单的例子,演示如何使用最中closable方法来控制选项卡是否可关闭:```html<template><el-tabs v-model="activeName"@tab-remove="handleTabRemove"><el-tab-pane v-for="tab intabs" :key="" :label="bel" :name="" closable>{{ tab.content }}</el-tab-pane></el-tabs></template><script>export default {data() {return {activeName: '1',tabs: [{ name: '1', label: 'Tab 1', content: 'Content 1' },{ name: '2', label: 'Tab 2', content: 'Content 2' },{ name: '3', label: 'Tab 3', content: 'Content 3' },]}},methods: {handleTabRemove(tab) {if ( !== '1') {alert('Tab cannot be closed!');} else {// 允许关闭选项卡return true;}}}}</script>```在上面的例子中,我们通过最中closable方法handleTabRemove来控制选项卡是否可关闭。

卓为VC——界面窗口——VC对话框小知识

卓为VC——界面窗口——VC对话框小知识

卓为VC——界面窗口——VC对话框小知识一、对话框属性:1.Styles->Clip siblings:排除子窗口之间的相对区域,也就是,当一个特定的窗口接收到绘图消息时,将所有重叠窗口排除在外,只重绘指定的子窗口。

Styles->Clip children:当在父窗口内绘图时,排除子窗口区域。

2.More StylesSystem modal:系统模式对话框Absolute align:坐标相对于屏幕原点Set foreground:设置为前台窗口No fail create:应用于Windows 95No idle message:不发送空闲消息Control:不使用标题栏的对话框Center:在屏幕中心显示对话框Center mouse:以鼠标坐标为对话框中心显示对话框Local edit:指定编辑控件的正文将存储于应用程序的局部数据段中3.Extended StylesTool Window:工具栏窗体Client edge:对话框边框下凹Static edge:对话框边框为实边框Accept files:是否接受文件拖放Control parent:用<Tab>键在窗口的子窗口间搜索Context help:在窗口标题栏添加一个问号按钮No parent notify:以这个风格创建的窗口在创建和销毁时,不向父窗口发送 WM_PARENTNOTFY消息二、对话框的创建与显示1.模态对话框:CDlg dlg;dlg.DoModal();CDialog::OnOK();//或CDialog::OnCancel() 关闭模态对话框2.非模态对话框CDlg *dlg=new CDlg;dlg->Create(IDD_DIALOG,this);dlg->ShowWindow(SW_SHOW);dlg->DestroyWindow(); //销毁非模态对话框,若在一个非模态对话框中实现OnCancel方法,需在内部调用DestroyWindow方法,不要调用基类的OnCancel方法,因为它调用EndDialog方法将使对话框不可见,但不销毁对话框。

c井tabcontrol中某一个tabpages的隐藏与显示

c井tabcontrol中某一个tabpages的隐藏与显示

c# tabcontrol中某一个tabpages的隐藏与显示这个控件只能把它从这tabControl1中去掉就可以达到隐藏的效果。

this.tabControl1.TabPages.Remove(this.tabPage2);这样一句就可以了。

不用担心,把tabPage2彻底的移除,只是暂时把它从tabControl1中移掉了,如果还想让它显示这样就可以:this.tabControl1.TabPages.Add(this.tabPage2);如果把tabPage2设置成置于最前:this.tabControl1.SelectedTab = this.tabPage2;经过尝试可以以如下方式实现TabControl的标签隐藏:在窗体Load事件中添加:this.tabControl1.Region = new Region(new RectangleF(this.tabPage1.Left, this.tabPage1.Top, this.tabPage1.Width, this.tabPage1.Height));以上代码完成标签的隐藏,但还存在一个问题,就是Tab + Ctrl 可以切换TabControl中的页,可以通过捕捉按键消息屏蔽组合键:protected override bool ProcessCmdKey(ref Message msg, Keys keyData){switch (keyData){case (Keys.Tab | Keys.Control):return true;default:break;}return base.ProcessCmdKey(ref msg, keyData);}以上两步即可实现T abControl 标签的隐藏,如果要效果理想,可以调整TabControl 的appearance属性设置TabControl 的绘制方式。

C# TEXTBOX控制两则(1)判断textbox里边输入的是全角还是半角public bool IsQuanJiao(string checkString){if (2 * checkString.Length == Encoding.Default.GetByteCount(checkString)) {return true;}else{return false;}}(2)控制textbox里边只输入数字void textboxnum(KeyPressEventArgs e){if ((e.KeyChar > (char)47 && e.KeyChar < (char)58) || e.KeyChar == (char)8) {e.Handled = false;}else{e.Handled = true;}}private void TEXTBOX1_KeyPress(object sender, KeyPressEventArgs e){textboxnum(e);}。

eclipse常用方法和快捷键说明

eclipse常用方法和快捷键说明

代码提示菜单Window -> Perferences…-> General -> keys,在中间的列表中选中Command名称为Content Asssist的项,在下面的Binding中按下需要设置的快捷键,如下图的:Shift + Space,然后点Apply或OK保存设置。

快捷键设置完成后点击列表列表的Binding按快捷键名称排序,看看有没有和其他快捷键设重复。

代码提示的常用模板可以在该Perferences窗口的Java -> Editor -> Templates中找到,如Templates列表中第一项,Name为main的项,其下面的Preview中的内容为一个main方法的模板。

编辑页面会弹出提示面板,选择需要的提示项后回车确定。

此时Eclipse会自动为我们生成这个main方法的模板:快速执行main、test等如果我们写了一个测试用的main方法,需要马上执行,可以点工具栏中的执行Main方法的按钮也可以利用快捷键快速执行:Alt + Shirt + X,放开后键入J,默认会执行当前编辑java类中的main方法。

如果当前编辑的是一个JUnit测试类,则可以使用Alt + Shirt + X,放开后键入T,快速执行该JUnit类中的测试方法。

文件定位,展开、收起项目树在树形结构的项目中快速定位当前编辑的文件:按下左侧面板中的按钮,项目树将展开并高亮显示当前文件。

要收起展开的树可以点击前面的按钮。

添加视图不小心关闭了控制台或需要使用eclipse提供的其它视图,点菜单Window –> Show View,选择需要添加的视图。

文件在本地的历史版本对于删除了且尚未上传到CVS或SVN的文件,右键点击文件所在的文件夹选中Restory fromLocal History…,选择需要恢复的文件。

如果想查看文件在本地的历史信息,可以右键点击该文件,选择Team -> Show Local History高亮显示类中的选中对象按下工具栏中的按钮或使用快捷键Alt + Shift + O,打开或关闭类中光标当前内容的高亮显示,如下图中的allShowChildren对象。

CDockablePane类的使用

CDockablePane类的使用

CDockablePane类的使用目录CDockablePane与对话框类联合使用方法 (2)CDockablePane与CTreeCtrl类联合使用的方法 (6)CDockablePane同CFormView类的联合使用方法 (9)两个带图标的CDockablePane派生类与CFormView类的联合使用方法 (12)CDockablePane类的布局设计 (15)CDockablePane窗口风格设置 (22)去除VS2010风格的框架菜单 (23)在View视图类中使用CSplitterWnd来拆分视图窗口(不在CMainFrame类的虚函数OnCreateClient中拆分视图框架窗口) (24)禁止dockablepane停靠浮动拖动 (26)VS2010菜单修改不了问题 (27)VS2010 DockablePane 每次打开都自动隐藏 (29)EnableDocking函数解释 (30)CDockablePane与对话框类联合使用方法1、新建对话框资源:①新建一个对话框资源IDD_DIALOG_DOCKDLG,Style设为Child,Border设为None;②把默认的OK和Cancel按键去掉,因为一般情况下点击这两个按钮后,对话框会销毁,而这里是不需要销毁的(如果没去掉点击了,悬浮框中的对话框内容就不能用了);③如下添加一个按钮IDC_BUTTON_TEST,后为对话框添加类CTestDlg;④为按钮添加响应void CTestDlg::OnBnClickedButtonTest(){// TODO: Add your control notification handler code hereMessageBox(_T("Hello World!"));}2、派生CDockablePane类①添加继承自CDockablePane的类CMyPane②添加此类的WM_CREATE和WM_SIZE消息响应,并添加上面对话框的成员变量CTestDlg m_TestDlg;③在CMyPane::OnCreate和CMyPane::OnSize函数中添加代码int CMyPane::OnCreate(LPCREATESTRUCT lpCreateStruct){if (CDockablePane::OnCreate(lpCreateStruct) == -1)return -1;// TODO: Add your specialized creation code hereCRect rectDummy;rectDummy.SetRectEmpty();// 创建选项卡窗口:if (!m_TestDlg.Create(IDD_DIALOG_DOCKDLG,this)){TRACE0("未能创建输出选项卡窗口/n");return -1; // 未能创建}m_TestDlg.ShowWindow(SW_SHOW);return 0;}void CMyPane::OnSize(UINT nType, int cx, int cy){CDockablePane::OnSize(nType, cx, cy);// TODO: Add your message handler code here// 选项卡控件应覆盖整个工作区m_TestDlg.SetWindowPos (this, -1, -1, cx, cy, SWP_NOMOVE | SWP_NOACTIVATE | SWP_NOZORDER);m_TestDlg.ShowWindow(SW_SHOW);}3、修改MainFrame类①然后在MainFrame.h代码中添加成员变量CMyPane m_MyPane;②在CMainFrame::OnCreate函数中添加代码if (!m_wndStatusBar.Create(this)){TRACE0("Failed to create status bar\n");return -1; // fail to create}m_wndStatusBar.SetIndicators(indicators, sizeof(indicators)/sizeof(UINT));if (!m_MyPane.Create(_T("MyPane"), this, CRect(0, 0, 100, 100), TRUE,IDD_DIALOG_DOCKDLG, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | CBRS_LEFT | CBRS_FLOAT_MULTI)){TRACE0("未能创建输出窗口/n");return FALSE;}m_MyPane.EnableDocking(CBRS_ALIGN_ANY);// TODO: Delete these five lines if you don't want the toolbar and menubar to be dockable m_wndMenuBar.EnableDocking(CBRS_ALIGN_ANY);m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);EnableDocking(CBRS_ALIGN_ANY);DockPane(&m_wndMenuBar);DockPane(&m_wndToolBar);DockPane(&m_MyPane); // 调整m_MyPane的大小使之适合父窗口4、运行结果5、补充①CDockablePane派生类销毁时,对话框也销毁掉(没有试验)void ControlPanel::OnDestroy(){CDockablePane::OnDestroy();// TODO: Add your message handler code herem_dlg.DestroyWindow();}②CDockablePane派生类对象的Create函数里面的666是这个停靠栏的ID,这里是随便指定的一个数值,只要不和其他已用资源重复即可,真正应用的时候,以在字符串表中添加一个ID,前面使用的是对话框的IDDm_Panel.Create(_T("tset"),this,CRect(0,0,300,300),TRUE,666,WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | CBRS_LEFT | CBRS_FLOAT_MULTI);CDockablePane与CTreeCtrl类联合使用的方法1、从CDockablePane继承,创建一个自定义类CNavView①CNavView.h的代码#pragma once// CNavViewclass CNavView : public CDockablePane{DECLARE_DYNAMIC(CNavView)public:CNavView();virtual ~CNavView();protected:afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);afx_msg void OnSize(UINT nType, int cx, int cy);public:CTreeCtrl m_wndClassView;void AdjustLayout();protected:DECLARE_MESSAGE_MAP()};②CNavView.cpp的代码// NavView.cpp : implementation file//#include "stdafx.h"#include "MDISample.h"#include "NavView.h"// CNavViewIMPLEMENT_DYNAMIC(CNavView, CDockablePane)CNavView::CNavView(){}CNavView::~CNavView(){}BEGIN_MESSAGE_MAP(CNavView, CDockablePane)ON_WM_CREATE()ON_WM_SIZE()END_MESSAGE_MAP()void CNavView::OnSize(UINT nType, int cx, int cy){CDockablePane::OnSize(nType, cx, cy);AdjustLayout();}void CNavView::AdjustLayout(){if (GetSafeHwnd() == NULL){return;}CRect rectClient;GetClientRect(rectClient);int cyTlb = 3;m_wndClassView.SetWindowPos(NULL, rectClient.left + 1, rectClient.top + cyTlb + 1, rectClient.Width() - 2, rectClient.Height() - cyTlb - 2, SWP_NOACTIVATE | SWP_NOZORDER); }// CNavView message handlersint CNavView::OnCreate(LPCREATESTRUCT lpCreateStruct){CRect rectDummy;rectDummy.SetRectEmpty();// Create views:const DWORD dwViewStyle = WS_CHILD | WS_VISIBLE | TVS_HASLINES | TVS_LINESATROOT | TVS_HASBUTTONS | WS_CLIPSIBLINGS | WS_CLIPCHILDREN;if (!m_wndClassView.Create(dwViewStyle, rectDummy, this, 2)){TRACE0("Failed to create Class View/n");return -1; // fail to create}HTREEITEM hRoot = m_wndClassView.InsertItem(_T("FakeApp classes"), 0, 0);m_wndClassView.SetItemState(hRoot, TVIS_BOLD, TVIS_BOLD);HTREEITEM hClass = m_wndClassView.InsertItem(_T("CFakeAboutDlg"), 1, 1, hRoot);m_wndClassView.InsertItem(_T("CFakeAboutDlg()"), 3, 3, hClass);m_wndClassView.Expand(hRoot, TVE_EXPAND);hClass = m_wndClassView.InsertItem(_T("CFakeApp"), 1, 1, hRoot);m_wndClassView.InsertItem(_T("CFakeApp()"), 3, 3, hClass);m_wndClassView.InsertItem(_T("InitInstance()"), 3, 3, hClass);m_wndClassView.InsertItem(_T("OnAppAbout()"), 3, 3, hClass);hClass = m_wndClassView.InsertItem(_T("CFakeAppDoc"), 1, 1, hRoot);m_wndClassView.InsertItem(_T("CFakeAppDoc()"), 4, 4, hClass);m_wndClassView.InsertItem(_T("~CFakeAppDoc()"), 3, 3, hClass);m_wndClassView.InsertItem(_T("OnNewDocument()"), 3, 3, hClass);hClass = m_wndClassView.InsertItem(_T("CFakeAppView"), 1, 1, hRoot);m_wndClassView.InsertItem(_T("CFakeAppView()"), 4, 4, hClass);m_wndClassView.InsertItem(_T("~CFakeAppView()"), 3, 3, hClass);m_wndClassView.InsertItem(_T("GetDocument()"), 3, 3, hClass);m_wndClassView.Expand(hClass, TVE_EXPAND);hClass = m_wndClassView.InsertItem(_T("CFakeAppFrame"), 1, 1, hRoot);m_wndClassView.InsertItem(_T("CFakeAppFrame()"), 3, 3, hClass);m_wndClassView.InsertItem(_T("~CFakeAppFrame()"), 3, 3, hClass);m_wndClassView.InsertItem(_T("m_wndMenuBar"), 6, 6, hClass);m_wndClassView.InsertItem(_T("m_wndToolBar"), 6, 6, hClass);m_wndClassView.InsertItem(_T("m_wndStatusBar"), 6, 6, hClass);hClass = m_wndClassView.InsertItem(_T("Globals"), 2, 2, hRoot);m_wndClassView.InsertItem(_T("theFakeApp"), 5, 5, hClass);m_wndClassView.Expand(hClass, TVE_EXPAND);return 0;}2、修改MainFrm.cpp①OnCreate方法最后加入如下代码CString str;str.LoadString(ID_VIEW_NAV);if (!m_Nav.Create(str, this, CRect(0, 0, 200, 200), TRUE, ID_VIEW_NAV, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | CBRS_LEFT | CBRS_FLOAT_MULTI)) {TRACE0("Failed to create navigate window/n");return FALSE; // failed to create}m_Nav.EnableDocking(CBRS_ALIGN_ANY);DockPane(&m_Nav);// ID_VIEW_NAV是自定义的字符串资源CDockablePane同CFormView类的联合使用方法1、CFormView简介①MFC提供了一个名为CFormView的特殊视图类,我们称其为表单视图.表单视图是指用控件来输入和输出数据的视图,用户可以方便地在表单视图中使用控件.表单视图具有对话框和滚动视图的特性,它使程序看起来象是一个具有滚动条的对话框.在有些情况下,用表单视图比用普通视图更符合用户的需要,例如,在向数据库输入数据时,显然用表单的形式可以更习惯些。

cmfcbutton 用法 -回复

cmfcbutton 用法 -回复

cmfcbutton 用法-回复如何使用cmfcbutton。

cmfcbutton是MFC(Microsoft Foundation Classes)框架中的一个控件,它用于创建按钮控件并添加各种自定义属性和功能。

在本文中,我将逐步介绍如何使用cmfcbutton,并提供一些具体示例,以帮助您更好地理解和应用cmfcbutton控件。

首先,我们需要创建一个MFC应用程序,并在您的项目中添加cmfcbutton控件。

要添加cmfcbutton控件,您需要打开资源视图,并将控件从工具箱拖放到您的对话框或窗体中。

一旦您将cmfcbutton控件添加到对话框中,您可以通过右键单击该控件并选择“属性”来访问控件的属性。

在属性页中,您可以设置按钮的外观、行为和其他属性。

下面是一些常用的属性,您可以根据自己的需求进行调整:1. ID: 按钮的唯一标识符,您可以使用它来识别按钮并在代码中处理按钮的点击事件。

2. Caption: 按钮上显示的文本。

3. Style: 按钮的样式,例如扁平样式、勾选样式等。

4. Image: 按钮上显示的图像,您可以为按钮添加一个图像,以替代文本。

5. Size: 按钮的大小,这包括宽度和高度。

一旦您设置了按钮的属性,您可以在代码中处理按钮的点击事件。

要处理点击事件,您需要编辑对话框的类文件(通常是CYourDialogClass.cpp),并添加一个函数来处理按钮的点击事件。

为了创建一个按钮点击事件处理函数,您可以在类文件中使用类向导,或手动添加一个相应的函数。

下面是一个示例:void CYourDialogClass::OnBnClickedButton(){处理按钮的点击事件}在这个函数中,您可以编写处理按钮点击事件的代码。

您可以执行任何操作,例如打开一个新的对话框、执行一些计算、显示一些消息等。

另外,您还可以为按钮添加其他事件处理函数,例如鼠标悬停事件、鼠标右键事件等。

这将增加按钮的交互性和功能。

C#窗体关闭按钮禁用

C#窗体关闭按钮禁用

C#中如何去除窗体默认的关闭按钮很多时候,在winform的设计下,会遇到新建窗体时不需要用到默认的关闭按钮的情况,而是用另外设置关闭 button或其他控件来控制窗体的关闭。

之前我遇到这个问题时,问了很多朋友,都没找到方法,VS的窗体属性里也没那一项,在MSDN里也没有相关的资料。

但后来偶然发现,原来办法是很简单的,只需要在初始化窗体的时候不显示那关闭按钮就可以了。

具体方法是,加上一句“ this.ControlBox = false;”。

如下:public Form1(){InitializeComponent();this.ControlBox = false; // 设置不出现关闭按钮}而对最大最小化按钮的显示,则可以在窗体的属性项里设置即可。

另外,如果需要保留那关闭按钮的显示,但又不起作用,则可以加上几句代码屏蔽掉它,具体代码如下://禁用窗体的关闭按钮private const int CP_NOCLOSE_BUTTON = 0x200;protected override CreateParams CreateParams{get{CreateParams myCp = base.CreateParams;myCp.ClassStyle = myCp.ClassStyle | CP_NOCLOSE_BUTTON;return myCp;}}下面说一下几个不是只是让关闭按钮隐藏但是可以达到类似效果的方法:1.将ControlBox属性设为False。

这种方法是让标题栏中的除了标题名以外的其他的全部隐藏,也就是把图标,最小化、最大化和关闭按钮全部隐藏。

2.让关闭按钮失效,方法是在事件里面找到FormCloseing事件,编辑该事件,在里面写上一条语句“e.Cancel = true;”,这样关闭按钮就失效了,按快捷键“Alt+空格+C”也关闭不了,只有用任务管理器关了,或者用一条语句(“Application.Exit();”)关闭该生成的应用程序,用“Alt+F4”也能关闭。

Common Dialog 控件说明

Common Dialog 控件说明

说明
cdlOFNExplorer 和 cdlOFNNoDereferenceLinks 标志适用于 Windows 95 和 Windows NT 4.0。Windows 95 中 cdlOFNExplorer 的公共对话框使用字符作为分隔符;而在没有 Windows 95 外壳的 Windows NT 的早期版本中,多重选择是使用空格作为分隔符(固而不能支持长文件名)。
cdlOFNHelpButton &H10 使对话框显示帮助按钮。
cdlOFNHideReadOnly &H4 隐藏只读复选框。
cdlOFNLongNames &H200000 使用长文件名。
cdlOFNNoChangeDir &H8 强制对话框将对话框打开时的目录置成当前目录。
CdlOFNNoDereferenceLinks &H100000 不要间接引用外壳链接(也称作快捷方式)。缺省时,选取外壳链接会引起它被外壳间接引用。
cdlOFNNoLongNames &H40000 无长文件名。
CdlOFNNoReadOnlyReturn &H8000 它指定返回的文件不能具有只读属性,也不能在写保护目录下面。
cdlOFNNoValidate &H100 它指定公共对话框允许返回的文件名中含有非法字符。
cdlOFNOverwritePrompt &H2 使“另存为”对话框当选择的文件已经存在时应产生一个信息框,用户必须确认是否覆盖该文件。
cdlOFNCreatePrompt &H2000 当文件不存在时对话框要提示创建文件。该标志自动设置 cdlOFNPathMustExist 和 cdlOFNFileMustExist 标志。

CDockablePane的使用方法及消除关闭按钮

CDockablePane的使用方法及消除关闭按钮

CDockablePane类可以用来创建停靠栏。

可以将其他控件集成到CDockablePane的派生类中。

本文描述如何将对话框集成到CDockablePane中。

集成其他控件的方式类似。

1、首先创建多文档应用程序,创建一个对话框类CTestDlg。

2、在程序添加一个停靠栏类,名为ControlPanel,其父类为CDockablePane,在该类中添加对话框成员。

需要将对话框的style设置为child。

另外border设置为none的话,得到的界面看上去会更主流一点。

1:class ControlPanel : public CDockablePane2: {3: .....4:public:5: CTestDlg m_dlg;6: };3、在ControlPanel的OnCreate方法中创建并显示对话框。

1:int ControlPanel::OnCreate(LPCREATESTRUCT lpCreateStruct)2: {3:if (CDockablePane::OnCreate(lpCreateStruct) == -1)4:return -1;5:6:// TODO: Add your specialized creation code here7:8: m_dlg.Create(IDD_DIALOG_TEST,this);9: m_dlg.ShowWindow(SW_SHOW);10:return 0;11: }4、ControlPanel销毁时,对话框也销毁掉:1:void ControlPanel::OnDestroy()2: {3: CDockablePane::OnDestroy();4:5:// TODO: Add your message handler code here6: m_dlg.DestroyWindow();7: }5、ControlPanel尺寸变化、隐藏的时候,对话框也要做相关处理:1:void ControlPanel::OnSize(UINT nType, int cx, int cy)2: {3: CDockablePane::OnSize(nType, cx, cy);4:5:// TODO: Add your message handler code here6:if(m_dlg.GetSafeHwnd())7: {8: CRect rct;9: GetClientRect(rct);10: m_dlg.MoveWindow(rct);11: }12: }6、在框架类中添加ControlPanel成员:1:class CMainFrame : public CMDIFrameWndEx2: {3: ...4: ControlPanel m_Panel;5: ...6: };7、在框架类创建时,创建这个ControlPanel对象:Create函数里面的666是这个停靠栏的ID,这里是随便指定的一个数值,只要不和其他已用资源重复即可,真正应用的时候,以在字符串表中添加一个ID。

cdockbar用法

cdockbar用法

CDockBar是MFC(Microsoft Foundation Class)库中的一个类,用于创建停靠栏(Dockable bar)。

停靠栏是一种可以停靠在主窗口边缘的面板,用户可以将其拖动到主窗口的其他位置或者浮动在主窗口之外。

以下是CDockBar的基本用法:创建一个CDockBar对象:首先需要创建一个CDockBar对象,通常在对话框类的成员变量中定义。

cppCDockBar m_wndDockBar;设置停靠栏属性:可以使用CDockBar类的成员函数来设置停靠栏的属性,例如设置标题、图标等。

cppm_wndDockBar.SetWindowText(_T("My Dockable Bar"));m_wndDockBar.SetIcon(theApp.LoadIcon(IDR_MAINFRAME));添加控件到停靠栏:将一个控件(如按钮、编辑框等)添加到停靠栏中,可以使用CDockBar 的成员函数AddControl或InsertControl。

cppCControlBarCtrl ctrlBarCtrl = new CControlBarCtrl(m_wndDockBar);ctrlBarCtrl->Create(_T("My Control Bar"), WS_CHILD | WS_VISIBLE, CRect(0, 0, 200, 20), this, 1); m_wndDockBar.AddControl(ctrlBarCtrl);启用停靠栏:最后,需要启用停靠栏,使其能够在主窗口中显示。

cppm_wndDockBar.EnableDocking(CBRS_ALIGN_ANY);m_pMainWnd->EnableDocking(CBRS_ALIGN_ANY);m_pMainWnd->DockControlBar(&m_wndDockBar);以上是CDockBar的基本用法,通过这些步骤可以创建并启用一个停靠栏。

Wincc中弹出对话框函数MessageBox参数以及应用

Wincc中弹出对话框函数MessageBox参数以及应用

Wincc中对话框弹出函数MessageBox参数以及应用按键显示://MessageBox(NULL,"这是一个默认的只有确定的消息框!","标题", MB_OK );//MessageBox(NULL,"这是一个确定取消的消息框!","标题", MB_OKCANCEL );//MessageBox(NULL,"这是一个是或否的消息框!","标题", MB_YESNO );//MessageBox(NULL,"这是一个是或否或取消的消息框!","标题", MB_YESNOCANCEL );//MessageBox(NULL,"这是一个重试或取消的消息框!","标题",MB_RETRYCANCEL );//MessageBox(NULL,"这是一个中止, 重试和忽略的消息框!","标题",MB_ABORTRETRYIGNORE ); 在消息框内显示的图标是以下值之一。

//MessageBox(NULL,"这是一个错误的消息框!","标题", MB_ICONHAND );//MessageBox(NULL,"这是一个错误的消息框!","标题", MB_ICONSTOP );//MessageBox(NULL,"这是一个错误的消息框!","标题", MB_ICONERROR );//MessageBox(NULL,"这是一个询问的消息框!","标题", MB_ICONQUESTION);//MessageBox(NULL,"这是一个警告的消息框!","标题", MB_ICONEXCLAMATION );//MessageBox(NULL,"这是一个警告的消息框!","标题", MB_ICONWARNING);//MessageBox(NULL,"这是一个信息的消息框!","标题", MB_ICONASTERISK );//MessageBox(NULL,"这是一个信息的消息框!","标题", MB_ICONINFORMATION );//MessageBox(NULL,"这是一个两种属性的消息框!","标题", MB_ICONEXCLAMATION|MB_OKCANCEL ); 对话框弹出时默认选中的按钮://MessageBox(NULL,"这是一个多种属性的消息框!默认选中第三个按钮","标题", MB_ICONEXCLAMA TION|MB_YESNOCANCEL|MB_DEFBUTTON3 );返回值://if(MessageBox(NULL,"这是一个判断选择了哪个按钮的消息框!","标题", MB_ICONEXCLAMA TION|MB_OKCANCEL )==IDCANCEL)//return;。

eclipse基本使用操作--一定要很熟悉

eclipse基本使用操作--一定要很熟悉

最常用快捷键快捷键功能备注eclipse常用快捷键在开发中,常用的eclipse快捷键:代码补全:alt + /添加和取消单行注释:ctrl + /添加多行注释:ctrl + shift + /取消多行注释:ctrl + shift + \快速复制所选择的代码:ctrl + shift + ↓或↑(注意:该快捷键和windows屏幕反转快捷键重合,需要禁用windows反转快捷键)移动所选择的代码向下或向下移动:alt + ↓或↑删除所选代码:ctrl + d修正代码:ctrl + 1 当书写的程序中出现小红X可以为错误的代码提供一些解决方案快速导入类所在的包:ctrl + shift + o代码格式化:ctrl + shift + fCtrl+1 快速修复最经典的Alt+/ 提供内容的帮助记不全方法类属性最常用输入try 按alt / 自动出现代码try catch 一般很容易出现异常的代码或者是很容易出错误的代码放在try...catch中Ctrl+O显示类中方法属性和大纲查找bug时非常有用(函数列表)多按一次Ctrl+O 列出更多的内部变量Ctrl+/为每行或者选择部分添加注释调试有用Ctrl+D删除当前行最喜欢的快捷键之一Ctrl+F6 界面切换程序名切换Ctrl+F 查找Ctrl+M窗口最大最小化方便进行代码的书写Ctrl+T 快速显示当前类的继承结构Ctrl+L 定位于某行Ctrl+Shift+R快速查找资源免得左边找Ctrl+F3 打开结构(跟Ctrl+O 类似)Ctrl+Q快速定位到最后一个编辑的地方F4 查看类结构Ctrl+F11 运行Ctrl+Shift+L显示所有的快捷键F11 调试最后一次运行的程序Ctrl+Shift+F最常用格式化某段代码不选择某段代码则格式化化整个Java文件Ctrl+Shift+S 保存所有save allCtrl+H全局搜索Ctrl+Alt+↓复制当前行到下一行Alt+↓当前行和下一行相互交换位置Alt+Enter 显示当前资源(工程或者文件)的属性Ctrl+W关闭当前编辑器Ctrl+E快速显示文件下拉列表Ctrl+/(小键盘)显示当前类的所有代码Ctrl+*(小键盘)关闭当前类的所有代码Ctrl+J 查找当前选中的文本块Ctrl+Shift+J 反向查找当前选中的文本块从后往前找Ctrl+Shift+P 定位到对于的匹配符(譬如{}) (从前面定位后面时,光标要在匹配符里面,后面到前面,则反之)上面是最常用的研读代码经常用的不用会很晕Crtl+O切换查看方法(当前查找类成员)Ctrl+T看继承关系重构最常用的快捷键:(注:一般重构的快捷键都是Alt+Shift开头的了)Alt+Shift+R重命名(是我自己最爱用的一个了,尤其是变量和类的Rename,比手工方法能节省很多劳动力)Alt+Shift+M 抽取方法(这是重构里面最常用的方法之一了,尤其是对一大堆泥团代码有用)Alt+Shift+C 修改函数结构(比较实用,有N个函数调用了这个方法,修改一次搞定)Alt+Shift+L 抽取本地变量( 可以直接把一些魔法数字和字符串抽取成一个变量,尤其是多处调用的时候)Alt+Shift+F 把Class中的local变量变为field变量(比较实用的功能) Alt+Shift+I 合并变量(可能这样说有点不妥Inline)Alt+Shift+V 移动函数和变量(不怎么常用)Alt+Shift+Z 重构的后悔药(Undo)正则表达式:其实就是定义一些规则来简化String字符串的操作通过一些特定的符号组成规则来限定字符串预定的规则正则表达式的书写:是由字母、数字等一些程序中经常使用的符号组合而成学习正则表达式其实就是学习正则中的各种符号(主要了解各种正则符号的含义)正则表达式的符号规则:一般规则:x 表示一个任意字母,字符串中当前某个位置必须包含所指定的x字符例:“abc” 正则:”a[a-z]”\\ 表示反斜线例:\t 表示制表符[abc] 表示当前字符串中某个字符必须是a或b或c []表示是一个范围[^abc] 表示不是[abc][a-zA-Z] 表示所有的大小写字母[a-d[f-h]] 表示字符的范围必须是a到d或f到h (并集)[a-d&&[d-f]] 表示字符的范围必须是d (交集)[a-z&&[^xm]] 表示字符的范围在a到z之间但是不包含x和m[a-d&&[^d-f]] 表示字符的范围必须是a或b或c预定义字符:. 表示任意字符\d 表示的就是数字可以代替[0-9]\D 表示[^0-9]\w 表示字母、数字、下划线可以代替[a-zA-Z_0-9]\W 表示[^a-zA-Z_0-9]\s 表示空白字符边界符:^ 表示行开始$ 表示行结束例:”helloworld” 正则:”^h 此处中间有正则d$数量词:x? 表示可以有0次或1次字符?表示前面的字符可以有0或1次x*表示可以有0次或多次字符*表示前面的字符可以有0或多次x+ 表示可以有1次或多次+表示前面的字符可以有1次或多次x{n}表示必须有n次{n}表示前面的字符只能有n次x{n,}表示至少有n次{n,}表示前面的字符必须有n次以上(不能少于n次) x{n,m} 表示从n到m次{n,m}表示前面的字符有n到m次正则表达式中只有4种功能:匹配、切割、替换、获取正则只属于字符串使用,而正则也是对字符串进行操作(匹配、切割、替换、获取)Eclipse界面简单设置1.重置为默认视图2.查看某一视图(恢复某一视图界面)3.代码模版(删除多余的或者自定义代码模版)4.配置快捷键window-preferences-General5.调整代码字体大小颜色6.显示代码行号7.导入包,资源,8.查看源代码光标选中单词,按住ctrl ,出现小手标识,单词出现超链接,点击弹出底层源代码9.改文件名称10.小光标放置ctrl+e或者双击11.Tab切换光标往前走,Shift+Table光标往回走12.ALT+CTRL+箭头上复制往上走13.ALT+箭头上往上走14.F4查找树15.查看代码的class文件16.Ctrl+f 查找替换某些内容17.Alt+shift+s???18.格式化代码Ctrl+Shift+f19.ctrl+shift+o代码中导入多个包20.Domain 域,主要描述某一领域的事物动物界等等21.Ctrl+/单行注释Ctrl+/取消单行注释Ctrl+shift+/多行注释Ctrl+shift+\取消多行注释22.Ctrl+A选中全部23.新建文件(.txt...)Eclipse快捷键使用1. 【ALT+/】此快捷键为用户编辑的好帮手,能为用户提供内容的辅助,不要为记不全方法和属性名称犯愁,当记不全类、方法和属性的名字时,多体验一下【ALT+/】快捷键带来的好处吧。

Eclipse快捷键大全

Eclipse快捷键大全

Eclipse快捷键大全ECLIPSE快捷键大全(1)Ctrl+M------->切换窗口的大小(2)Ctrl+Q------->跳到最后一次的编辑处(3) Ctrl+1------->快速修复(最经典的快捷键,就不用多说了)(4) Ctrl+3------->快速查找想要的工具,和所有匹配的东西(最经典的快捷键,就不用多说了)(5) Ctrl+D------->删除当前行(6) Ctrl+Q------->定位到最后编辑的地方(7) Ctrl+L------->定位在某行 (对于程序超过100的人就有福音了)定位到当前编辑器的某一行,对非Java文件也有效(8) Ctrl+M------->最大化当前的Edit或View (再按则反之)(9) Ctrl+/------->注释当前行,再按则取消注释(10) Ctrl+O------>快速显示 OutLine显示类中方法和属性的大纲,能快速定位类的方法和属性,在查找Bug时非常有用。

(11) Ctrl+T------>快速显示当前类的继承结构(12) Ctrl+W------>关闭当前Editer(13) Ctrl+K 、【Ctrl++Shift+K】------>参照选中的Word快速定位到下一个,快速向下和向上查找选定的内容,从此不再需要用鼠标单击查找对话框了(14) Ctrl+E------>快速显示当前Editer的下拉列表(如果当前页面没有显示的用黑体表示)(15) Ctrl+ - ------>(小键盘) 折叠当前类中的所有代码(16) Ctrl+×----->(小键盘) 展开当前类中的所有代码(17) Ctrl+Space-->代码助手完成一些代码的插入(但一般和输入法有冲突,可以修改输入法的热键,也可以暂用Alt+/来代替)(18)Ctrl+Pgdw--->对于XML文件是切换代码和图示窗口(19)Ctrl+I------>格式化激活的元素Format Active Elements。

C++Builder快捷键

C++Builder快捷键

C++Builder快捷键F1 帮助Alt+F2 终止程序运行(特别是调试时很有用)F3 查找下一个结果(和Ctrl+F配合使用)F5 设置/取消断点Ctrl+F5 设置Watch变量F7 跟踪(进入子程序)F8 单步(不进入子程序)F9 运行Ctrl+F9 编译但不运行F11 切换对象观察器(Object Inspector)F12 切换Form和代码编辑窗口Ctrl+F 搜索Ctrl+R 替换Ctrl+K+B Marks the beginning of a blockCtrl+K+C Copies a selected blockCtrl+K+H Hides/shows a selected blockCtrl+K+I Indents a block by the amount specified in the Block Indent combo box on the General page of the Editor Options dialog box.Ctrl+K+K Marks the end of a blockCtrl+K+L Marks the current line as a blockCtrl+K+N Changes a block to uppercaseCtrl+K+O Changes a block to lowercaseCtrl+K+P Prints selected blockCtrl+K+R Reads a block from a fileCtrl+K+T Marks a word as a blockCtrl+K+U Outdents a block by the amount specified in the Block Indent combo box on the General page of the EditorOptions dialog box.Ctrl+K+V Moves a selected blockCtrl+K+W Writes a selected block to a fileCtrl+K+Y Deletes a selected blockCtrl+O+C Turns on column blockingCtrl+O+I Marks an inclusive blockCtrl+O+K Turns off column blockingCtrl+O+L Marks a line as a blockShift+Alt+arrow Selects column-oriented blocksClick+Alt+mousemv Selects column-oriented blocksCtrl+Q+B Moves to the beginning of a blockCtrl+Q+K Moves to the end of a blockClipboard control (default)Ctrl+Ins Edit|CopyShift+Del Edit|CutShift+Ins Edit|PasteCtrl+C Edit|CopyCtrl+V Edit|PasteCtrl+X Edit|Cut--------------------------------------------------------------------------------Debugger (default, classic, Brief, Epsilon, and Visual Studio) Breakpoint viewCtrl+V View SourceCtrl+S Edit SourceCtrl+E Edit BreakpointEnter Edit BreakpointCtrl+D Delete BreakpointDel Delete BreakpointCtrl+A Add BreakpointIns Add BreakpointCtrl+N Enable BreakpointCall stack viewCtrl+V View SourceCtrl+S Edit SourceSpace View Source (Epsilon only)Ctrl+Enter Edit Source (Epsilon only)Message viewCtrl+V View SourceSpace View SourceCtrl+S Edit SourceCtrl+Enter Edit SourceWatch viewCtrl+E Edit WatchEnter Edit WatchCtrl+A Add WatchIns Add WatchCtrl+D Delete WatchDel Delete Watch--------------------------------------------------------------------------------Editor (default)Shortcut Action or commandF1 Help|Topic SearchCtrl+F1 Help|Topic SearchF3 Search|Search AgainCtrl+E Search|Incremental SearchCtrl+F Search|FindCtrl+I Inserts a tab characterCtrl+j Templates pop-up menuCtrl+N Inserts a new lineCtrl+P Causes next character to be interpreted as an ASCII sequenceCtrl+R Search|ReplaceCtrl+S File|SaveCtrl+T Deletes a wordCtrl+Y Deletes a lineCtrl+Z Edit|UndoCtrl+ Code Completion pop-up windowCtrl+Shift+I Indents blockCtrl+Shift+U Outdents blockCtrl+Shift+Y Deletes to the end of a lineCtrl+Shift+Z Edit|RedoCtrl+Shift+ Code Parameters pop-up windowAlt+[ Finds the matching delimiter (forward)Alt+] Finds the matching delimiter (backward)End Moves to the end of a lineHome Moves to the start of a lineEnter Inserts a carriage returnIns Turns insert mode on/offDel Deletes the character to the right of the cursorBackspace Deletes the character to the left of the cursorTab Inserts a tabSpace Inserts a blank spaceLeft Arrow Moves the cursor left one column, accounting for the autoindent setting Right Arrow Moves the cursor right one column, accounting for the autoindent setting Up Arrow Moves up one lineDown Arrow Moves down one linePage Up Moves up one pagePage Down Moves down one pageCtrl+Left Arrow Moves one word leftCtrl+Right Arrow Moves one word rightCtrl+Tab Moves to the next code page (or file)Ctrl+Shift+Tab Moves to the previous code page (or file)Ctrl+Backspace Deletes the word to the right of the cursor Ctrl+Home Moves to the top of a fileCtrl+End Moves to the end of a fileCtrl+Del Deletes a currently selected blockCtrl+Space Inserts a blank spaceCtrl+PgDn Moves to the bottom of a screenCtrl+PgUp Moves to the top of a screenCtrl+Up Arrow Scrolls up one lineCtrl+Down Arrow Scrolls down one lineCtrl+Enter Opens file at cursorShift+Tab Moves the cursor to the left one tab positionShift+Backspace Deletes the character to the left of the cursorShift+Left Arrow Selects the character to the left of the cursorShift+Right Arrow Selects the character to the right of the cursorShift+Up Arrow Moves the cursor up one line and selects from the left of the starting cursor positionShift+Down Arrow Moves the cursor down one line and selects from the right of the starting cursor position Shift+PgUp Moves the cursor up one screen and selects from the left of the starting cursor positionShift+PgDn Moves the cursor down one line and selects from the right of the starting cursor position。

CDockablePane类的使用

CDockablePane类的使用

CDockablePane类的使用目录CDockablePane与对话框类联合使用方法 (2)CDockablePane与CTreeCtrl类联合使用的方法 (9)CDockablePane同CFormView类的联合使用方法 (15)两个带图标的CDockablePane派生类与CFormView类的联合使用方法 (20)CDockablePane类的布局设计 (26)CDockablePane窗口风格设置 (37)去除VS2010风格的框架菜单 (39)在View视图类中使用CSplitterWnd来拆分视图窗口(不在CMainFrame类的虚函数OnCreateClient中拆分视图框架窗口) (41)禁止dockablepane停靠浮动拖动 (44)VS2010菜单修改不了问题 (45)VS2010 DockablePane 每次打开都自动隐藏 (47)EnableDocking函数解释 (48)CDockablePane与对话框类联合使用方法1、新建对话框资源:①新建一个对话框资源IDD_DIALOG_DOCKDLG,Style设为Child,Border设为None;②把默认的OK和Cancel按键去掉,因为一般情况下点击这两个按钮后,对话框会销毁,而这里是不需要销毁的(如果没去掉点击了,悬浮框中的对话框内容就不能用了);③如下添加一个按钮IDC_BUTTON_TEST,后为对话框添加类CTestDlg;④为按钮添加响应void CTestDlg::OnBnClickedButtonT est(){// TODO: Add your control notification handler code hereMessageBox(_T("Hello World!"));}2、派生CDockablePane类①添加继承自CDockablePane的类CMyPane②添加此类的WM_CREATE和WM_SIZE消息响应,并添加上面对话框的成员变量CTestDlg m_TestDlg;③在CMyPane::OnCreate和CMyPane::OnSize函数中添加代码int CMyPane::OnCreate(LPCREATESTRUCT lpCreateStruct){if (CDockablePane::OnCreate(lpCreateStruct) == -1)return -1;// TODO: Add your specialized creation code hereCRect rectDummy;rectDummy.SetRectEmpty();// 创建选项卡窗口:if (!m_TestDlg.Create(IDD_DIALOG_DOCKDLG,this)){TRACE0("未能创建输出选项卡窗口/n");return -1; // 未能创建}m_TestDlg.ShowWindow(SW_SHOW);return 0;}void CMyPane::OnSize(UINT nType, int cx, int cy){CDockablePane::OnSize(nType, cx, cy);// TODO: Add your message handler code here// 选项卡控件应覆盖整个工作区m_TestDlg.SetWindowPos (this, -1, -1, cx, cy, SWP_NOMOVE | SWP_NOACTIVATE | SWP_NOZORDER);m_TestDlg.ShowWindow(SW_SHOW);}3、修改MainFrame类①然后在MainFrame.h代码中添加成员变量CMyPane m_MyPane;②在CMainFrame::OnCreate函数中添加代码if (!m_wndStatusBar.Create(this)){TRACE0("Failed to create status bar\n");return -1; // fail to create}m_wndStatusBar.SetIndicators(indicators, sizeof(indicators)/sizeof(UINT));if (!m_MyPane.Create(_T("MyPane"), this, CRect(0, 0, 100, 100), TRUE,IDD_DIALOG_DOCKDLG, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS |WS_CLIPCHILDREN | CBRS_LEFT | CBRS_FLOAT_MULTI)){TRACE0("未能创建输出窗口/n");return FALSE;}m_MyPane.EnableDocking(CBRS_ALIGN_ANY);// TODO: Delete these five lines if you don't want the toolbar and menubar to be dockablem_wndMenuBar.EnableDocking(CBRS_ALIGN_ANY);m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);EnableDocking(CBRS_ALIGN_ANY);DockPane(&m_wndMenuBar);DockPane(&m_wndToolBar);DockPane(&m_MyPane); // 调整m_MyPane的大小使之适合父窗口4、运行结果5、补充①CDockablePane派生类销毁时,对话框也销毁掉(没有试验)void ControlPanel::OnDestroy(){CDockablePane::OnDestroy();// TODO: Add your message handler code herem_dlg.DestroyWindow();}②CDockablePane派生类对象的Create函数里面的666是这个停靠栏的ID,这里是随便指定的一个数值,只要不和其他已用资源重复即可,真正应用的时候,以在字符串表中添加一个ID,前面使用的是对话框的IDDm_Panel.Create(_T("tset"),this,CRect(0,0,300,300),TRUE,666,WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | CBRS_LEFT | CBRS_FLOAT_MULTI);CDockablePane与CTreeCtrl类联合使用的方法1、从CDockablePane继承,创建一个自定义类CNavView①CNavView.h的代码#pragma once// CNavViewclass CNavView : public CDockablePane{DECLARE_DYNAMIC(CNavView)public:CNavView();virtual ~CNavView();protected:afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);afx_msg void OnSize(UINT nType, int cx, int cy);public:CTreeCtrl m_wndClassView;void AdjustLayout();protected:DECLARE_MESSAGE_MAP()};②CNavView.cpp的代码// NavView.cpp : implementation file//#include "stdafx.h"#include "MDISample.h"#include "NavView.h"// CNavViewIMPLEMENT_DYNAMIC(CNavView, CDockablePane) CNavView::CNavView(){}CNavView::~CNavView(){}BEGIN_MESSAGE_MAP(CNavView, CDockablePane) ON_WM_CREATE()ON_WM_SIZE()END_MESSAGE_MAP()void CNavView::OnSize(UINT nType, int cx, int cy){CDockablePane::OnSize(nType, cx, cy);AdjustLayout();}void CNavView::AdjustLayout(){if (GetSafeHwnd() == NULL){return;}CRect rectClient;GetClientRect(rectClient);int cyTlb = 3;m_wndClassView.SetWindowPos(NULL, rectClient.left + 1, rectClient.top + cyTlb + 1, rectClient.Width() - 2, rectClient.Height() - cyTlb - 2, SWP_NOACTIVATE | SWP_NOZORDER);}// CNavView message handlersint CNavView::OnCreate(LPCREATESTRUCT lpCreateStruct){CRect rectDummy;rectDummy.SetRectEmpty();// Create views:const DWORD dwViewStyle = WS_CHILD | WS_VISIBLE | TVS_HASLINES | TVS_LINESATROOT | TVS_HASBUTTONS | WS_CLIPSIBLINGS | WS_CLIPCHILDREN;if (!m_wndClassView.Create(dwViewStyle, rectDummy, this, 2)){TRACE0("Failed to create Class View/n");return -1; // fail to create}HTREEITEM hRoot = m_wndClassView.InsertItem(_T("FakeApp classes"), 0, 0);m_wndClassView.SetItemState(hRoot, TVIS_BOLD, TVIS_BOLD);HTREEITEM hClass = m_wndClassView.InsertItem(_T("CFakeAboutDlg"), 1, 1, hRoot);m_wndClassView.InsertItem(_T("CFakeAboutDlg()"), 3, 3, hClass);m_wndClassView.Expand(hRoot, TVE_EXPAND);hClass = m_wndClassView.InsertItem(_T("CFakeApp"), 1, 1, hRoot);m_wndClassView.InsertItem(_T("CFakeApp()"), 3, 3, hClass);m_wndClassView.InsertItem(_T("InitInstance()"), 3, 3, hClass);m_wndClassView.InsertItem(_T("OnAppAbout()"), 3, 3, hClass);hClass = m_wndClassView.InsertItem(_T("CFakeAppDoc"), 1, 1, hRoot);m_wndClassView.InsertItem(_T("CFakeAppDoc()"), 4, 4, hClass);m_wndClassView.InsertItem(_T("~CFakeAppDoc()"), 3, 3, hClass);m_wndClassView.InsertItem(_T("OnNewDocument()"), 3, 3, hClass);hClass = m_wndClassView.InsertItem(_T("CFakeAppView"), 1, 1, hRoot);m_wndClassView.InsertItem(_T("CFakeAppView()"), 4, 4, hClass);m_wndClassView.InsertItem(_T("~CFakeAppView()"), 3, 3, hClass);m_wndClassView.InsertItem(_T("GetDocument()"), 3, 3, hClass);m_wndClassView.Expand(hClass, TVE_EXPAND);hClass = m_wndClassView.InsertItem(_T("CFakeAppFrame"), 1, 1, hRoot);m_wndClassView.InsertItem(_T("CFakeAppFrame()"), 3, 3, hClass);m_wndClassView.InsertItem(_T("~CFakeAppFrame()"), 3, 3, hClass);m_wndClassView.InsertItem(_T("m_wndMenuBar"), 6, 6, hClass);m_wndClassView.InsertItem(_T("m_wndToolBar"), 6, 6, hClass);m_wndClassView.InsertItem(_T("m_wndStatusBar"), 6, 6, hClass);hClass = m_wndClassView.InsertItem(_T("Globals"), 2, 2, hRoot);m_wndClassView.InsertItem(_T("theFakeApp"), 5, 5, hClass);m_wndClassView.Expand(hClass, TVE_EXPAND);return 0;}2、修改MainFrm.cpp①OnCreate方法最后加入如下代码CString str;str.LoadString(ID_VIEW_NAV);if (!m_Nav.Create(str, this, CRect(0, 0, 200, 200), TRUE, ID_VIEW_NAV, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | CBRS_LEFT | CBRS_FLOAT_MULTI)){TRACE0("Failed to create navigate window/n");return FALSE; // failed to create}m_Nav.EnableDocking(CBRS_ALIGN_ANY);DockPane(&m_Nav);// ID_VIEW_NAV是自定义的字符串资源CDockablePane同CFormView类的联合使用方法1、CFormView简介①MFC提供了一个名为CFormView的特殊视图类,我们称其为表单视图.表单视图是指用控件来输入和输出数据的视图,用户可以方便地在表单视图中使用控件.表单视图具有对话框和滚动视图的特性,它使程序看起来象是一个具有滚动条的对话框.在有些情况下,用表单视图比用普通视图更符合用户的需要,例如,在向数据库输入数据时,显然用表单的形式可以更习惯些。

C#Dockpanel入门基础必看篇

C#Dockpanel入门基础必看篇

C#Dockpanel⼊门基础必看篇⼀、引⽤:1.建⽴⼀个WinForm⼯程,默认⽣成了⼀个WinForm窗体Form1(此处默认为主窗体)。

2.引⽤—>添加引⽤—>浏览—>weiFenLuo.winFormsUI.Docking.dll。

3.设置Form1窗体属性IsMdiContainer:True。

4.⼯具箱—>右键—>选择项—>.net组件—>浏览—>weiFenLuo.winFormsUI.Docking.dll—>在⼯具箱出现dockPanel。

5.将dockPanel拖到窗体主窗体上,设置Dock属性,⼀般默认设置为:Fill。

⼆、设置停靠窗体:1.新建⼀个WinForm窗体。

2.在代码中修改窗体继承于DockContent。

如下:using WeifenLuo.WinFormsUI.Docking;public partial class Form2 : DockContent3.在主窗体中显⽰停靠窗体。

在要显⽰停靠窗体的事件中写⼊以下代码:Private void 事件名(){ Form2 form2 = new Form2();form2.Show(停靠的⽗容器,DockState.要停靠的⽅位);}三、设置窗体浮动:1、设置需要浮动的窗体的Dock中的DockAreas属性。

四、关闭当前容器中的所有窗体1、获取到当容器中的所有⼦窗体的个数:dockPanel1.Contents.Count;2、获取容器中的所有对象的数组,并将其转换为IDockContent对象:IDockContent content =(IDockContent)dockPanel1.Contents[index];3、循环关闭:for (int index = dockPanel1.Contents.Count;index > 0; index--){if(dockPanel1.Contents[index] isIDockContent){IDockContent content =(IDockContent)dockPanel1.Contents[index];content.DockHandler.Close();}}五、关闭除当前正在活动的⼦窗体之外得到所有⼦窗体:1、获取当前正在活动的⼦窗体对象:this.ActiveMdiChild;2、遍历容器中的⼦窗体,并判断是否为当前正在活动的窗体,不是则关闭:if (this.ActiveMdiChild != null){ //判断是否有⼦窗体foreach (Form f in this.MdiChildren){//获取⼦窗体if (f != this.ActiveMdiChild) { f.Close(); }//判断是否为当前选定窗⼝}}六、更改窗体风格:1、下载要设置风格的资源库或相关控件。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

CDockablePane类可以用来创建停靠栏。

可以将其他控件集成到CDockablePane的派生类中。

本文描述如何将对话框集成到CDockablePane中。

集成其他控件的方式类似。

1、首先创建多文档应用程序,创建一个对话框类CTestDlg。

2、在程序添加一个停靠栏类,名为ControlPanel,其父类为CDockablePane,在该类中添加对话框成员。

需要将对话框的style设置为child。

另外border设置为none的话,得到的界面看上去会更主流一点。

1:class ControlPanel : public CDockablePane
2: {
3: .....
4:public:
5: CTestDlg m_dlg;
6: };
3、在ControlPanel的OnCreate方法中创建并显示对话框。

1:int ControlPanel::OnCreate(LPCREATESTRUCT lpCreateStruct)
2: {
3:if (CDockablePane::OnCreate(lpCreateStruct) == -1)
4:return -1;
5:
6:// TODO: Add your specialized creation code here
7:
8: m_dlg.Create(IDD_DIALOG_TEST,this);
9: m_dlg.ShowWindow(SW_SHOW);
10:return 0;
11: }
4、ControlPanel销毁时,对话框也销毁掉:
1:void ControlPanel::OnDestroy()
2: {
3: CDockablePane::OnDestroy();
4:
5:// TODO: Add your message handler code here
6: m_dlg.DestroyWindow();
7: }
5、ControlPanel尺寸变化、隐藏的时候,对话框也要做相关处理:
1:void ControlPanel::OnSize(UINT nType, int cx, int cy)
2: {
3: CDockablePane::OnSize(nType, cx, cy);
4:
5:// TODO: Add your message handler code here
6:if(m_dlg.GetSafeHwnd())
7: {
8: CRect rct;
9: GetClientRect(rct);
10: m_dlg.MoveWindow(rct);
11: }
12: }
6、在框架类中添加ControlPanel成员:
1:class CMainFrame : public CMDIFrameWndEx
2: {
3: ...
4: ControlPanel m_Panel;
5: ...
6: };
7、在框架类创建时,创建这个ControlPanel对象:
Create函数里面的666是这个停靠栏的ID,这里是随便指定的一个数值,只要不和其他已用资源重复即可,真正应用的时候,以在字符串表中添加一个ID。

1:int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
2: {
3: ...
4: m_Panel.Create(_T("tset"),this,CRect(0,0,300,300),TRUE,666,
5: WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | CBRS_LEFT | CBRS_FLOAT_MULTI);
6: m_Panel.EnableDocking(CBRS_ALIGN_ANY);
7:
8: EnableDocking(CBRS_ALIGN_ANY);
9: DockPane(&m_Panel);
10: ...
11: }
编译运行后,可以发现框架中添加了一个停靠栏,之前创建的那个对话框嵌入在里面。

如何去掉CDockablePane的Close按钮
方法一:
在继承CDockablePane的类中重写CanBeClosed()方法:
virtual BOOL CanBeClosed() const;
...
BOOL COutputWnd::CanBeClosed() const
{
return FALSE;
}
方法二:
if (!m_wndView.Create(strFileView, this, CRect(0, 0, 250, 200), TRUE,
ID_VIEW_VIEW,
WS_CHILD | WS_VISIBLE | CBRS_LEFT | CBRS_HIDE_INPLACE | WS_CAPTION, AFX_CBRS_REGULAR_TABS, AFX_CBRS_RESIZE))
在Create的时候后面加上这样的参数设置AFX_CBRS_REGULAR_TABS,
AFX_CBRS_RESIZE 就不会有那个关闭按钮了
////方法二比较实用。

相关文档
最新文档