MFC中关闭窗口的几种办法

合集下载

mfc7

mfc7
当用户从“文件”菜单选择执行“退出”时,将发送MFC标准命令消息ID_APP_EXIT。MFC实现了函数CWinApp::OnAppExit()来完成对该命令消息的缺省处理。
void CWinApp::OnAppExit()
{
// same as double-clicking on main window close box
然后,关闭并销毁对应的边框窗口。
如果文档对象的 m_bAutoDelete为真,则销毁文档对象自身。
窗口的销毁过程
DestroyWindow
从图6-1、图6-2可以看出,销毁窗口是通过调用DestroyWindow来完成的。DestroyWindow是CWnd类的一个虚拟函数。CWnd实现了该函数,而CMDIChildWnd覆盖了该函数。
BOOL CDocument::OnSaveDocument(LPCTSTR lpszPathName)
该函数是虚拟函数,用来保存文件。其实现的功能和OpOpenDocument相反,但处理流程类似,描述如下:
根据lpszPathName打开文件pFile;
使用pFile构造一个用于写入数据的CArchive对象,此对象用来保存数据到文件;
设置鼠标为时间瓶形状;
使用Serialize函数完成序列化写;
完毕,恢复鼠标的形状。
CWinApp::SaveAllModified()
CWinApp::CloseAllDocuments(BOOL bEndSession)
这两个函数都遍历模板管理器列表,并分别对列表中的模板管理器对象逐个调用CDocManager的同名成员函数:
如果不是主窗口被关闭,则是文档边框窗口被关闭,又分两种情况:若该窗口所显示的文档被且仅被该窗口显示,则关闭文档和文档窗口并销毁窗口;若该窗口显示的文档还被其他文档边框窗口所显示,则仅仅关闭和销毁文档窗口。

mfc 代码关闭当前多文档的子窗口

mfc 代码关闭当前多文档的子窗口

MFC(Microsoft Foundation Class)是微软公司开发的用于Windows评台的C++类库,用于简化Windows应用程序的开发。

在MFC中,关闭当前多文档的子窗口可以通过以下步骤实现:1. 获取当前活动的文档视图需要获取到当前处于活动状态的文档视图,可以通过以下代码实现:```cppCWnd* pActiveWnd = AfxGetM本人nWnd(); CMDIChildWnd* pChild = (CMDIChildWnd*)pActiveWnd; CView* pView = pChild->GetActiveView();```2. 关闭子窗口有了当前活动的文档视图之后,可以通过以下代码关闭子窗口:```cpppChild->MDIDestroy();```在这段代码中,`MDIDestroy` 函数用于关闭当前子窗口。

3. 整合关闭子窗口的代码将以上两个步骤整合在一起,完整的代码如下所示:```cppCWnd* pActiveWnd = AfxGetM本人nWnd(); CMDIChildWnd* pChild = (CMDIChildWnd*)pActiveWnd; CView* pView = pChild->GetActiveView();pChild->MDIDestroy();```这样,就可以在MFC中关闭当前多文档的子窗口了。

以上代码基于MFC类库,在多文档程序框架下实现了关闭当前子窗口的功能。

在实际开发中,可以根据具体的需求和程序结构进行适当的修改和扩展。

总结起来,关闭当前多文档的子窗口在MFC中实现并不复杂,通过获取当前活动的文档视图并调用相应的函数即可完成这一操作。

希望本文对MFC开发者能有所帮助。

初步思考:续写部分将围绕MFC中关闭子窗口的方法展开,涉及到MFC开发中更广泛的内容,包括MFC文档视图架构、消息处理机制等。

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);。

关闭窗口键盘操作方法

关闭窗口键盘操作方法

关闭窗口键盘操作方法关闭窗口是我们在使用电脑或者其他设备时常见的操作。

关闭窗口有多种方法,可以使用鼠标点击窗口的关闭按钮,也可以使用键盘来完成关闭窗口操作。

本文将介绍一些常用的键盘操作方法来关闭窗口。

1. 使用快捷键Alt + F4:这是关闭当前窗口的最常用的方法之一。

只需按下键盘上的“Alt”键,并同时按下“F4”键,即可关闭当前窗口。

这个快捷键方法对于大部分的Windows系统和应用程序都适用。

在Mac系统中,使用这个组合键同时按下“Command”键和“Q”键同样也可以关闭当前窗口。

2. 使用组合键Ctrl + W:这是关闭当前标签页或者文档的常用方法之一。

只需按下键盘上的“Ctrl”键,并同时按下“W”键,即可关闭当前标签页或者文档。

这个组合键方法在大部分的浏览器和文档编辑器中都适用。

3. 使用组合键Ctrl + F4:这是关闭当前标签页或者文件的另一种常用方法。

只需按下键盘上的“Ctrl”键,并同时按下“F4”键,即可关闭当前标签页或者文件。

这个组合键方法在一些特定的应用程序中使用较多。

4. 使用组合键Ctrl + Shift + W:这是关闭所有标签页或者文件的方法之一。

只需按下键盘上的“Ctrl”键,并同时按下“Shift”键和“W”键,即可关闭所有标签页或者文件。

这个组合键方法在一些浏览器和文档编辑器中常用。

5. 使用组合键Alt + F4 + Enter:这是关闭当前窗口并确认关闭的方法之一。

只需按下键盘上的“Alt”键,并同时按下“F4”键,再按下“Enter”键,即可关闭当前窗口并确认关闭。

这个组合键方法在一些特定的应用程序中使用较多。

6. 使用组合键Ctrl + Alt + Del:这是关闭程序或者强制关闭当前任务的方法之一。

只需按下键盘上的“Ctrl”键、同时按下“Alt”键,并再按下“Del”键,即可进入任务管理器界面,然后选择关闭程序或者强制关闭当前任务。

这个组合键方法在一些特定情况下使用较多,例如程序无响应或者死机情况下。

几种MFC对话框的隐藏方法

几种MFC对话框的隐藏方法

几种MFC对话框的隐藏方法有很多应用程序要求一起动就隐藏起来,这些程序多作为后台程序运行,希望不影响其他窗口,往往只在托盘区显示一个图标。

这些程序通常都是对话框程序,而对话框在初始化的过程上与SDI、MDI的初始化是不同的,对话框只需要DoModule或者是CreateDialog等等对话框函数调用一次便可,SDI、MDI则要好几步才行。

这样看来,对话框在使用方法上面是隐藏了不少细节的,其中就没有SDI、MDI所要求的ShowWindow(nCmdShow)这一步。

因此对话框要想一运行就隐藏,并不是很直接的。

有一些方法可以做到这一点,下面我们就来看看几种方案。

1.定时器最直观,又是最无奈的一个方法就是使用定时器。

既然我们在对话框开始显示之前不能用ShowWindow(SW_HIDE)将其隐藏,那就给一个时间让它显示,完了我们在隐藏它。

方法:1.在OnInitDialog()函数里设置定时器:(WINDOWS API里面响应消息WM_INITDIALOG)SetTimer(1, 1, NULL);2.添加处理WM_TIMER的消息处理函数OnTimer,添加代码:if(nIDEvent == 1){DeleteTimer(1);ShowWindow(SW_HIDE);}这种方法的缺点是显而易见的,使用定时器,使得程序的稳定性似乎打一个折扣;窗口是要先显示出来的,那么效果就是窗口闪了一下消失。

2.改变对话框显示状况在对话框初始化时改变其显示属性可以让它隐藏起来。

方法是调用SetWindowPlacement函数:BOOL CDialogExDlg::OnInitDialog(){CDialog::OnInitDialog();//DO somethingWINDOWPLACEMENT wp;wp.length=sizeof(WINDOWPLACEMENT);wp.flags=WPF_RESTORETOMAXIMIZED;wp.showCmd=SW_HIDE;SetWindowPlacement(&wp);return TRUE;}在需要显示时(通常是响应热键或者托盘图标的鼠标消息):WINDOWPLACEMENT wp;wp.length=sizeof(WINDOWPLACEMENT);wp.flags=WPF_RESTORETOMAXIMIZED;wp.showCmd=SW_SHOW;SetWindowPlacement(&wp);这样的效果很不理想:窗口显示在屏幕的左上角,并且是只有标题栏,要正常显示,还需加上如下代码:定义一个成员变量CRect rect;在OnInitDialog()里面:GetWindowRect(&rect);在需要显示的地方:SetWindowPos(&wndNoTopMost, wndRc.left, wndRc.top, w ndRc.right, wndRc.bottom,SWP_SHOWWINDOW);CenterWindow();即使这样,效果还是很差。

MFC使用教程

MFC使用教程

MFC使用教程第一部分:MFC简介Visual C++ 不仅仅是一个编译器。

它是一个全面的应用程序开发环境,使用它你充分利用具有面向对象特性的C++ 来开发出专业级的Windows 应用程序。

为了能充分利用这些特性,你必须理解C++ 程序设计语言。

掌握了C++,你就必须掌握Microsoft 基本类库(MFC) 的层次结构。

该层次结构包容了Windows API 中的用户界面部分,并使你能够很容易地以面向对象的方式建立Windows 应用程序。

这种层次结构适用于所有版本的Windows 并彼此兼容。

你用MFC 所建立的代码是完全可移植的。

简单介绍MFC的基本概念和术语以及事件驱动程序设计方法。

输入、编译和运行一个简单的MFC程序。

第二部分中将详细解释这些代码。

第三部分讨论了MFC控件和如何定制它们。

什么是MFC?如果你要建立一个Windows 应用程序,应该如何下手?好的开端是从设计用户界面开始。

首先,你要决定什么样的用户能使用该程序并根据需要来设置相应的用户界面对象。

Windows 用户界面有一些标准的控件,如按钮、菜单、滚动条和列表等,这对那些Windows 用户已经是很熟悉了。

要记住的是,作为程序员必须选择一组控件并决定如何把它们安排到屏幕上。

传统上,你需要在纸上做一下用户界面的草图,直到对各元素感到满意为止。

这对于一些比较小的项目,以及一些大项目的早期原型阶段是可以的。

下一步,是要实现代码。

为任何Windows 平台建立应用程序时,程序员都有两种选择:C 或C++。

使用C,程序员是在Windows 应用程序界面( API ) 的水平上编写代码。

该界面是由几百个 C 函数所组成,这些函数在Windows API 参考手册中都有介绍。

对于Windows NT, API 被称为"Win32 API",以区别于其用于Windows 3.1的16位API, Microsoft 也提供了C++ 库,它位于任何Windows API 之上,能够使程序员的工作更容易。

问题笔记1,MFC取消折叠窗口显示的方法(5篇)

问题笔记1,MFC取消折叠窗口显示的方法(5篇)

问题笔记1,MFC取消折叠窗口显示的方法(5篇)第一篇:问题笔记1,MFC取消折叠窗口显示的方法1.Mfc窗口下拉菜单折叠问题,取消下拉方法:You don't want the “intellegent menus” feature, some menu items are hidden, and you have to click to show the whole menu?To disable this feature, go to CMainFrame::OnCreate.You will see some code like this:// enable menu personalization(most-recently used commands)// TODO: define your own basic commands, ensuring that each pulldown menu has at least one basic command.CList lstBasicCommands;lstBasicCommands.AddTail(ID_FILE_NEW);lstBasicCommands.AddTail(ID_FILE_OPEN);...lstBasicCommands.AddTail(ID_SORTING_GROUPBYTYPE);CMFCToolBar::SetBasicCommands(lstBasicCommands);Remove it.第二篇:剪纸折叠方法喜欢剪纸的朋友都知道,剪纸前我们要先折叠,再画上自己喜欢的纹样,然后再剪出漂亮的作品,所以剪纸之前的折叠是不可缺少的步骤,今天向大家介绍四折剪纸的两种折叠方法。

剪纸折叠方法:第一种折法把正方形的纸向上对边折,如图所示。

再向右对边折,如图所示。

然后右下角向左上角对折,如图所示。

第二种折法把正方形的纸,对角折,如图所示。

MFC中解决回车键关闭窗口的一般方法

MFC中解决回车键关闭窗口的一般方法

206351219.doc在一般情况下编写的对话框程序,用户在运行的时候,如果不注意按下了ENTER或者ESC键,程序就会立刻退出,之所以会这样,是因为按下Enter键时,Windows就会自动去找输入焦点落在了哪一个按钮上,当获得焦点的按钮的四周将被点线矩形包围。

如果所有按钮都没有获得输入焦点,Windows就会自动去寻找程序或资源所指定的默认按钮(默认按钮边框较粗)。

如果对话框没有默认按钮,那么即使对话框中没有OK按钮,OnOK函数也会自动被调用,对于一个普通的对话框程序来说,OnOK函数的调用,以为着程序会立刻退出。

为了使Enter键无效,最简单的办法就是将CExDlg的OnOK函数写成空函数,然后针对OK按钮写一个新的函数来响应。

ESC键的原理也是如此,它是默认和OnCancel函数映射在一起的。

对于ESC键,需要自己重载CDialog类的PreTranslateMessage函数,当发现是ESC键的时候,过滤掉这个消息或者是替换掉这个消息。

以下是简单的代码示例:【方法1】可以先重载OnOK函数voidCTestDlg::OnOK(){//里面什么也不写}然后重载PreTranslateMessage函数,把ESC键的消息,用RETURN键的消息替换,这样,按ESC 的时候,也会执行刚才的OnOK函数,这样问题就可以解决了。

BOOL CxxxDlg::PreTranslateMessage(MSG* pMsg){if(pMsg->message==WM_KEYDOWN && pMsg->wParam==VK_ESCAPE){pMsg->wParam=VK_RETURN; //将ESC键的消息替换为回车键的消息,这样按ESC的时候//也会去调用OnOK函数,而OnOK什么也不做,这样ESC也被屏蔽}return CDialog::PreTranslateMessage(pMsg);}【方法2】直接在重载的PreTranslateMessage函数中屏蔽回车和ESC的消息,和以上方法大同小异:BOOL CxxxDlg::PreTranslateMessage(MSG* pMsg){if(pMsg->message==WM_KEYDOWN && pMsg->wParam==VK_ESCAPE) return TRUE;if(pMsg->message==WM_KEYDOWN && pMsg->wParam==VK_RETURN) return TRUE;elsereturn CDialog::PreTranslateMessage(pMsg);}第 1 页共1 页。

windows7中关闭当前窗口的方法

windows7中关闭当前窗口的方法

windows7中关闭当前窗口的方法
在使用Windows 7操作系统时,我们经常需要关闭当前窗口。

关闭当前窗口的方法有很多种,下面将介绍几种常用的方法。

方法一:使用鼠标右键
在Windows 7中,我们可以使用鼠标右键来关闭当前窗口。

只需要将鼠标移动到窗口的标题栏上,然后点击鼠标右键,选择“关闭”即可关闭当前窗口。

方法二:使用快捷键
Windows 7中还提供了一组快捷键,可以帮助我们快速关闭当前窗口。

只需要按下“Alt”和“F4”键,即可关闭当前窗口。

方法三:使用任务栏
在Windows 7中,我们还可以使用任务栏来关闭当前窗口。

只需要将鼠标移动到任务栏上,找到需要关闭的窗口,然后右键点击窗口图标,选择“关闭窗口”即可关闭当前窗口。

方法四:使用任务管理器
如果某个程序无法正常关闭,我们可以使用任务管理器来强制关闭当前窗口。

只需要按下“Ctrl”、“Alt”和“Delete”键,选择“任务管理器”,
找到需要关闭的程序,然后点击“结束任务”即可关闭当前窗口。

总结:
以上就是Windows 7中关闭当前窗口的几种方法。

我们可以根据自己的习惯和需要选择合适的方法来关闭当前窗口。

无论使用哪种方法,都要注意保存好当前窗口中的数据,以免数据丢失。

关闭窗口快捷键

关闭窗口快捷键

关闭窗口快捷键在计算机使用过程中,关闭窗口是我们常常需要进行的操作之一。

而为了提高效率,很多人都倾向于使用快捷键来关闭窗口,而不是通过鼠标点击右上角的关闭按钮。

本文将介绍一些常见的关闭窗口的快捷键,帮助你更加高效地操作电脑。

1. Alt + F4Alt + F4是最为常见的关闭窗口快捷键之一。

无论你当前正在使用的是浏览器、文档编辑器还是其他应用程序,按下Alt + F4组合键,即可关闭当前窗口。

2. Ctrl + WCtrl + W是在浏览器中关闭标签页的快捷键。

当你使用浏览器浏览网页时,每个打开的网页都对应一个标签页,通过按下Ctrl + W组合键,可以快速关闭当前标签页。

如果你只打开了一个标签页,则关闭该标签页后浏览器窗口也会被关闭。

3. Ctrl + Shift + WCtrl + Shift + W是关闭浏览器窗口的快捷键。

通过按下Ctrl + Shift + W组合键,可以一次关闭所有打开的标签页,并且关闭整个浏览器窗口。

4. Ctrl + F4Ctrl + F4是一种关闭窗口的通用快捷键。

在许多应用程序中,特别是多文档界面的应用程序中,按下Ctrl + F4组合键可以关闭当前窗口或者文档。

5. Ctrl + QCtrl + Q是关闭Mac电脑上的应用程序快捷键。

如果你是Mac用户,按下Ctrl + Q可以快速关闭当前应用程序的窗口。

这些是一些常见的关闭窗口快捷键,可以帮助你提高操作效率。

但需要注意的是,在使用快捷键关闭窗口时,一定要谨慎操作,避免意外关闭了未保存的文件或者其他重要的内容。

总结:关闭窗口是我们在计算机使用中经常需要操作的任务之一,使用快捷键可以提高操作效率。

本文介绍了一些常见的关闭窗口快捷键,如Alt + F4、Ctrl + W、Ctrl + Shift + W等。

要注意在使用快捷键关闭窗口时,避免意外关闭未保存的文件。

希望这些快捷键能够帮助你更加高效地操作电脑。

windows7中关闭当前窗口的方法

windows7中关闭当前窗口的方法

windows7中关闭当前窗口的方法
在使用Windows7操作系统的时候,有时候需要快速关闭当前窗口以便进行下一步操作,因此了解如何快捷关闭当前窗口是非常必要的。

下面我们将详细介绍在Windows7中关闭当前窗口的方法。

步骤一:使用鼠标右键点击窗口任务栏上的应用程序图标。

在弹出的菜单中,选择“关闭窗口”选项。

这个方法比较简单,但是只适用于普通的应用程序窗口,而不是文件夹窗口或者控制面板窗口。

步骤二:使用快捷键来关闭当前窗口。

按住Alt键不放,再按下F4键。

这个快捷键在关闭当前窗口时非常方便快捷,但也只适用于普通的应用程序窗口。

如果要关闭文件夹或者控制面板窗口,可以先点击一下窗口内的任意一处来获得焦点,然后再使用这个快捷键。

步骤三:使用任务管理器来关闭当前窗口。

在任务栏上右键单击空白部分,然后选择“启动任务管理器”选项。

在弹出的任务管理器窗口中,选择要关闭的窗口并单击“结束任务”按钮,即可关闭当前窗口。

步骤四:使用Alt + F4快捷键来直接关闭当前应用程序。

这个方法适用于很多情况,无论是打开的窗口,还是启动的应用程序,都可以通过这个快捷键来快速关闭。

步骤五:点击窗口右上角的“X”关闭按钮来关闭当前窗口。

这个方法是最常用的方法之一,适用于所有类型的窗口和应用程序。

总结:以上是关闭窗口的多种方法,可以根据自己的使用习惯来选择适合自己的方法。

熟练掌握这些方法可以帮助我们更加高效地使用Windows7操作系统。

mfc关闭标题栏的样式

mfc关闭标题栏的样式

mfc关闭标题栏的样式在MFC(Microsoft Foundation Classes)中关闭窗口标题栏的样式可以通过以下几种方式实现:1. 使用无边框窗口样式:可以在创建窗口时,将窗口样式设置为无边框样式,例如:DWORD dwStyle = WS_POPUP | WS_SYSMENU;CreateEx(0, AfxRegisterWndClass(0), _T("My Window"), dwStyle, rect, pParentWnd, 0);这样窗口将没有标题栏和边框。

2. 自定义绘制标题栏:可以通过自定义绘制窗口的标题栏来隐藏或修改标题栏的样式。

在窗口的`OnNcPaint`函数中,可以使用GDI函数绘制自定义的标题栏,例如:void CMyWnd::OnNcPaint()。

{。

// 自定义绘制标题栏的代码。

}。

在自定义的绘制代码中,可以使用GDI函数绘制标题栏的背景、图标、按钮等元素。

3. 使用窗口样式修改函数:可以使用`ModifyStyle`函数或`ModifyStyleEx`函数来动态修改窗口的样式。

例如,可以在窗口的`OnInitDialog`函数中调用`ModifyStyle`函数来移除标题栏的样式:BOOL CMyDlg::OnInitDialog()。

{。

CDialogEx::OnInitDialog();// 移除标题栏样式。

ModifyStyle(WS_CAPTION, 0);return TRUE;}。

这样窗口将在初始化时移除标题栏。

需要注意的是,关闭标题栏可能会影响窗口的交互和系统默认的行为,因此在进行此类修改时需要谨慎考虑。

同时,以上方法适用于MFC框架,具体实现可能因应用程序的需求而有所不同。

[精华版]MFC中CWnd类及其派生类对话框、消息处理、窗口操作

[精华版]MFC中CWnd类及其派生类对话框、消息处理、窗口操作

MFC中CWnd类及其派生类对话框、消息处理、窗口操作CWnd类我们在屏幕上看到的所有对象都和窗口有关,它们或者派生于CWnd,属继承关系,如对话框、工具栏、状态栏、子控件;或者被CWnd合成,属服务员与服务对象关系,如图标、菜单、显示设备。

CWnd类封装的窗口操作主要包含窗口的创建和销毁、操作窗口风格、操作窗口状态、窗口子类化、获取指定窗口等。

当然,CWnd还实现了其他功能:1、绘制窗口GetDC()//取得客户区显示设备上下文GetWindowsDC()//取得整个窗口的显示设备上下文ReleaseDC()BeginPaint()EndPaint()PrintClient()RedrawWindow()//重绘客户区的某区域2、操作窗口子控件GetDlgItem():取得(临时的)控件对象指针SetDlgItemText()和GetDlgItemText():设置、取得控件标题SubclassDlgItem():将控件句柄与相应类相关联DlgDirList()和DlgDirListComboBox():以文件列表或目录列表填充(组合框)列表框CheckDlgButton()和CheckRadioButton():设置复选框(单选按钮)状态。

GetNextDlgTabItem():取得下一个WS_TABSTOP风格控件3、窗口定时器SetTimer():设置定时器KillTimer():销毁定时器4、窗口消息的相关函数GetCurrentMessage():取得当前被处理的消息PreTranslateMessage():可重载的虚函数。

被UI线程的消息循环调用,可以过滤窗口收到的消息,过滤出的消息得以分发SendMessage():向本窗口发送消息。

不通过消息循环,直接调用窗口函数处理消息。

窗口函数执行完毕,该函数才返回PostMessage():向本窗口寄送消息。

将消息放入消息队列,立即返回。

关闭窗口的六种方法

关闭窗口的六种方法

关闭窗口的六种方法
1. 点击窗口右上角的“X”按钮关闭。

2. 使用快捷键“Alt”+“F4”关闭窗口。

3. 在任务栏上右击窗口的缩略图,然后选择“关闭”。

4. 通过任务管理器关闭窗口:按下“Ctrl”+“Shift”+“Esc”打开
任务管理器,找到窗口所在的进程,右击选择“结束任务”。

5. 在命令行下关闭窗口:按下“Ctrl”+“Alt”+“Delete”,选择“任务管理器”,切换到“进程”选项卡,在命令行下输入
“taskkill /im 程序名/f”,回车即可。

6. 在注册表中禁用窗口:依次打开“开始菜单”、“运行”,输入“regedit”进入注册表编辑器,找到路径
“HKEY_CURRENT_USER\Control Panel\Desktop”,将“AutoEndTasks”键值改为“1”,保存即可。

这种方法需要谨慎使用,因为这样可能会
造成数据丢失。

mfc中关闭窗口的几种办法

mfc中关闭窗口的几种办法

MFC中关闭窗口的几种办法+MFC中MessageBox的用法MFC中关闭窗口的几种办法:退出程序用AfxGetMainWnd()->SendMessage(WM_CLOSE);关闭当前窗口用DestroyWindow( );关闭模式对话框用EndDialog(0);MFC中MessageBox的用法消息框是个很常用的控件,属性比较多,本文列出了它的一些常用方法,及指出了它的一些应用场合。

1.MessageBox("这是一个最简单的消息框!");2.MessageBox("这是一个有标题的消息框!","标题");3.MessageBox("这是一个确定取消的消息框!","标题", MB_OKCANCEL );4.MessageBox("这是一个警告的消息框!","标题", MB_ICONEXCLAMA TION );5.MessageBox("这是一个两种属性的消息框!","标题", MB_ICONEXCLAMA TION|MB_OKCANCEL );6.if(MessageBox("一种常用的应用","标题",MB_ICONEXCLAMA TION|MB_OKCANCEL)==IDCANCEL)return;附其它常用属性系统默认图标,可在消息框上显示X错误MB_ICONHAND, MB_ICONSTOP, and MB_ICONERROR询问MB_ICONQUESTION!警告MB_ICONEXCLAMA TION and MB_ICONWARNINGi信息MB_ICONASTERISK and MB_ICONINFORMA TION按钮的形式MB_OK 默认MB_OKCANCEL 确定取消MB_YESNO 是否MB_YESNOCANCEL 是否取消返回值IDCANCEL 取消被选IDNO 否被选IDOK 确定被选IDYES 是被选MFC 文本框用法//获得EDITCEdit* pBoxOne;pBoxOne = (CEdit*) GetDlgItem(IDC_EDIT1);//付值pBoxOne->SetWindowText( _T"FOO" );//取值CString str;pBoxOne->GetWindowText(str);GetDlgItem(IDC_EDIT1)->SetWindowText( _T"FOO" );也可以//取值CString str;GetDlgItem(IDC_EDIT1)->GetWindowText(str);EditControl是在MFC对话框中最频繁的使用的控件之一VC++2005提供EditControl的属性和控件事件操作简单方便1只允许输入数字如果设置EditControl中只能输入数字,在VC6.0中需要编写一个派生类来达到目的,而在VC++2005下只需要在属性对话框中将Number的属性值设为True就可以了.2获取EditControl的内容两种方法第一种,利用MFC应用程序向导生成一个基于对话框的应用程序,从资源视图中选择该Dialog窗体,利用右侧的工具箱,向Dialog内添加一个EditControl项,声明控件变量的类别为V alue,变量类型为CString,变量名为m_sEdit_Content. CString m_sEdit_Content;CString s;UpdateData(true);s=m_sEdit_Content.GetString();MessageBox(s,_T("获取编辑框的内容"),MB_OK);s.ReleaseBuffer();这样就取得了编辑框的内容UpdateData(true);这句代码很重要,它的作用是将输入的数据装入EditControl对应的变量m_sEdit_Content中.由于MFC应用程序向导默认是使用Unicode库,所以MessageBox中的字符串需要用_T(),否则会出现const char[]转换LPCTSTR错误,如果不使用Unicode库就不需要_T().第二种方法声明控件变量的类别为Control,变量类型为CEdit,变量名为m_Edit_Content.代码如下(Unicode)CString s;s.GetBufferSetLength(1024);m_Edit_Content.GetWindowTextW(s.GetBuffer(),s.GetLength());MessageBox(s,_T("获取文本框的内容"),MB_OK);s.ReleaseBuffer();如果不是Unicode下获取编辑框内容的函数就是GetWindowTextA3将EditControl中的内容转化为整数在限制编辑框只能数字之后,要将字符串转化为整数声明控件变量的类别为V alue,变量类型为CString,变量名为m_sEdit_Content.CString s;UpdateData(true);s=m_sEdit_Content.GetString();int n=_tstoi(s);s.ReleaseBuffer();n就是所需要的整数在VC2005下字符串转换成整数需要_tstoi这个函数4限制编辑框的输入长度声明控件变量的类别为Control,变量类型为CEdit,变量名为m_Edit_Content.在对话框初始化的地方写m_Edit_Content.SetLimitText(1);编辑框就只能输入一个字符了.教你如何用WORD文档(2012-06-27 192246)转载▼标签:杂谈1. 问:WORD 里边怎样设置每页不同的页眉?如何使不同的章节显示的页眉不同?答:分节,每节可以设置不同的页眉。

mfc 释放安全句柄

mfc 释放安全句柄

mfc 释放安全句柄在MFC框架中,当我们创建了一些对象并分配了系统资源时,需要及时释放这些资源以避免内存泄漏或其他问题的出现。

对于安全句柄的释放,也是非常重要的一步。

安全句柄是一种指向内核对象的引用,它通常是一个整数值或一个指针。

我们使用安全句柄来访问系统资源,并在使用完毕后将其释放。

在MFC框架中,常见的安全句柄类型包括文件句柄、窗口句柄和设备上下文句柄等。

为了释放安全句柄,我们可以使用一些特定的函数或方法来完成。

下面是一些常见的安全句柄释放方式和相关的代码示例:1.关闭文件句柄:在使用完文件句柄后,我们可以通过调用CloseHandle函数来关闭它,示例代码如下:```cppHANDLE hFile = CreateFile(L"test.txt", GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);//使用文件句柄进行读取等操作CloseHandle(hFile);```2.销毁窗口句柄:当我们使用CreateWindow函数创建了一个窗口后,需要在不再使用它时销毁它,示例代码如下:```cppHWND hWnd = CreateWindow(L"SampleClass", L"Sample Window", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT,CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL,GetModuleHandle(NULL), NULL);//使用窗口句柄进行消息处理等操作DestroyWindow(hWnd);```3.释放设备上下文句柄:对于一些需要使用设备上下文的操作,例如图形绘制等,我们可以通过调用DeleteDC函数来释放设备上下文句柄,示例代码如下:```cppHDC hdc = GetDC(hWnd);//使用设备上下文句柄进行绘制等操作ReleaseDC(hWnd, hdc);```除了上述示例代码中的函数外,还有一些其他的释放安全句柄的函数,例如:CloseClipboard、CloseHandle、DeleteObject等。

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

MFC中关闭窗口的几种办法+MFC中MessageBox的用法MFC中关闭窗口的几种办法:
退出程序用AfxGetMainWnd()->SendMessage(WM_CLOSE);
关闭当前窗口用DestroyWindow( );
关闭模式对话框用EndDialog(0);
MFC中MessageBox的用法
消息框是个很常用的控件,属性比较多,本文列出了它的一些常用方法,及指出了它的一些应用场合。

1.
MessageBox("这是一个最简单的消息框!");
2.
MessageBox("这是一个有标题的消息框!","标题");
3.
MessageBox("这是一个确定取消的消息框!","标题", MB_OKCANCEL );
4.
MessageBox("这是一个警告的消息框!","标题", MB_ICONEXCLAMA TION );
5.
MessageBox("这是一个两种属性的消息框!","标题", MB_ICONEXCLAMA TION|MB_OKCANCEL );
6.
if(MessageBox("一种常用的应用","标题",MB_ICONEXCLAMATION|MB_OKCANCEL)==IDCANCEL)
return;
附其它常用属性
系统默认图标,可在消息框上显示
X错误MB_ICONHAND, MB_ICONSTOP, and MB_ICONERROR
?询问MB_ICONQUESTION
!警告MB_ICONEXCLAMATION and MB_ICONW ARNING
i信息MB_ICONASTERISK and MB_ICONINFORMA TION
按钮的形式
MB_OK 默认
MB_OKCANCEL 确定取消
MB_YESNO 是否
MB_YESNOCANCEL 是否取消
返回值
IDCANCEL 取消被选
IDNO 否被选
IDOK 确定被选
IDYES 是被选
MFC 文本框用法
//获得EDIT
CEdit* pBoxOne;
pBoxOne = (CEdit*) GetDlgItem(IDC_EDIT1);
//付值
pBoxOne->SetWindowText( _T"FOO" );
//取值
CString str;
pBoxOne->GetWindowText(str);
GetDlgItem(IDC_EDIT1)->SetWindowText( _T"FOO" );
也可以
//取值
CString str;
GetDlgItem(IDC_EDIT1)->GetWindowText(str);
EditControl是在MFC对话框中最频繁的使用的控件之一
VC++2005提供EditControl的属性和控件事件操作简单方便
1只允许输入数字
如果设置EditControl中只能输入数字,在VC6.0中需要编写一个派生类来达到目的,而在VC++2005下只需要在属性对话框中将Number的属性值设
为True就可以了.
2获取EditControl的内容
两种方法
第一种,利用MFC应用程序向导生成一个基于对话框的应用程序,从资源视图中选择该Dialog窗体,利用右侧的工具箱,向Dialog内添加一个
EditControl项,声明控件变量的类别为Value,变量类型为CString,变量名为m_sEdit_Content. CString m_sEdit_Content;
CString s;
UpdateData(true);
s=m_sEdit_Content.GetString();
MessageBox(s,_T("获取编辑框的内容"),MB_OK);
s.ReleaseBuffer();
这样就取得了编辑框的内容
UpdateData(true);这句代码很重要,它的作用是将输入的数据装入EditControl对应的变量m_sEdit_Content中.
由于MFC应用程序向导默认是使用Unicode库,所以MessageBox中的字符串需要用_T(),否则会出现const char[]转换LPCTSTR错误,如果不使用
Unicode库就不需要_T().
第二种方法
声明控件变量的类别为Control,变量类型为CEdit,变量名为m_Edit_Content.
代码如下(Unicode)
CString s;
s.GetBufferSetLength(1024);
m_Edit_Content.GetWindowTextW(s.GetBuffer(),s.GetLength()); MessageBox(s,_T("获取文本框的内容"),MB_OK);
s.ReleaseBuffer();
如果不是Unicode下获取编辑框内容的函数就是GetWindowTextA
3将EditControl中的内容转化为整数
在限制编辑框只能数字之后,要将字符串转化为整数
声明控件变量的类别为Value,变量类型为CString,变量名为m_sEdit_Content. CString s;
UpdateData(true);
s=m_sEdit_Content.GetString();
int n=_tstoi(s);
s.ReleaseBuffer();
n就是所需要的整数
在VC2005下字符串转换成整数需要_tstoi这个函数
4限制编辑框的输入长度
声明控件变量的类别为Control,变量类型为CEdit,变量名为m_Edit_Content. 在对话框初始化的地方写m_Edit_Content.SetLimitText(1);
编辑框就只能输入一个字符了.。

相关文档
最新文档