VC动态隐藏和显示标题栏

合集下载

在VC++中实现无标题栏对话框的拖动

在VC++中实现无标题栏对话框的拖动

目前,很多基于对话框的应用程序中对话框都是不带框架的,也就是说对话框没有标题栏。

众所周知,窗口的移动都是通过鼠标拖动窗口的标题栏来实现的,那么现在应用程序中的对话框没有了标题栏,用户如何移动对话框呢?本实例针对这个问题提出解决的办法。

一、实现方法解决无标题栏窗口的拖动问题有两种方案,一种方案是使用常规思路来处理鼠标拖拽事件,当窗口获得WM_LBUTTONDOWN (OnLButtonDown)时,通过设置标志并调用CWnd::SetCapture ()函数来让当前窗口捕捉鼠标消息,应用程序进入移动模式,此时只要有WM_MOUSEMOVE消息过来,就可以据此移动框架窗口,最后当用户释放鼠标按钮,则WM_LBUTTONUP消息处理例程清除标志并调用CWnd::ReleaseCapture()函数将鼠标控制返还给Windows。

这种方法比较繁琐,首先要决定窗口准备移到哪?然后要想好如何重绘窗口等等,而且根据屏幕显示属性对话框"效果"页中"视觉效果"项的"拖动时显示窗口中内容"复选框是不是选中,拖动效果是不同的。

那么你怎么知道设置的信息呢?方法是调用SystemParametersInfo(SPI_GETDRAGFULLWINDOWS)。

Windows要程序员来事无巨细地处理这些繁琐的事情真是太糟了。

由于Windows本身知道通过鼠标点住标题栏可以移动窗口,那么能不能将鼠标在窗口客户区任何地方的点击拖动行为都模仿成好像是在标题栏中一样呢?答案是肯定的,这样就产生了第二种拖动窗口移动的方法。

实际上,用鼠标点住对话框背景进行拖动操作并不难,但是你必须了解在标题栏里拖动窗口的原理。

Windows首先确定鼠标点中了哪个窗口,然后向那个窗口发送一个WM_NCHITTEST消息找出此窗口的哪个"非客户区"(如边界、最大化/最小化按钮、菜单、标题等等)拥有鼠标光标。

VC中对话框使用技巧集合

VC中对话框使用技巧集合

注:以下代码以一个名为CTest6Dlg的对话框类为例--------------------------------------------------------------------------------1. 在任务栏隐藏对话框ModifyStyleEx(WS_EX_APPWINDOW, WS_EX_TOOLWINDOW);--------------------------------------------------------------------------------2. 使对话框为顶层窗口SetWindowPos(&this->wndTopMost, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE);--------------------------------------------------------------------------------3. 在运行时添加最大化,最小化按钮SetWindowLong(this->m_hWnd, GWL_ST YLE,GetWindowLong(this->m_hWnd, GWL_ST YLE) |WS_MINIM IZEBOX | WS_MAXIMIZEBOX);UpdateWindow();--------------------------------------------------------------------------------4. 使能对话框右上角关闭按钮在OnInitDialog中方法一:CMenu* menu = GetSystemMenu(FALSE);menu->Modify M enu(SC_CLOSE, MF_BYCOMMAND | M F_GRAYED );方法二:CMenu* menu = GetSystemMenu(FALSE);menu->EnableMenuItem(SC_CLOSE, MF_BYCOMMAND | MF_GRAYED);--------------------------------------------------------------------------------5. 当对话框一部分在屏幕外时,显示全部对话框SendMessage(DM_REPOSITION);--------------------------------------------------------------------------------6. 改变鼠标外形添加WM_SETCURSOR 消息映射函数BOOL CTest6Dlg::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message) {SetCursor(AfxGetApp()->LoadStandardCursor(IDC_HELP));return 0;}--------------------------------------------------------------------------------7. 改变对话框背景色和文本颜色在CTest6App的InitInstance中添加SetDialogBkColor(RGB(255,0,0), RGB(0,255,0));--------------------------------------------------------------------------------8. 改变对话框caption上的图标导入自己的图标资源到工程中,把原来ID为IDR_MAINFRAME 的资源删除,把新的图标的ID命名为IDR_MAINFRAME --------------------------------------------------------------------------------9. 在主对话框显示前,显示一个login对话框BOOL CTest6App::InitInstance(){//...int nResponse;CLoginDlg loginDlg;nResponse = loginDlg.DoModal();if (nResponse == IDOK){}if (nResponse == IDCANCEL){return FALSE;}CTest6Dlg dlg;m_pMainWnd = &dlg;int nResponse = dlg.DoModal();if (nResponse == IDOK ){}else if (nResponse == IDCANCEL){}return FALSE;}然后重载CLoginDlg对话框的哦OnOK(),在其中判断条件void CLoginDlg::OnOK(){if (条件满足)CDialog::OnOK();elseAfxMessageBox(_T("invalid password!"));}--------------------------------------------------------------------------------10. 在对话框中添加工具栏方法一:添加以下代码到OnInitDialog 中if ( !m_wndToolBar.Create(this) || !m_wndToolBar.LoadToolBar(IDR_TOOLBAR1) ){TRACE0("Failed to Create Dialog Toolbar\n");EndDialog(IDCANCEL);}CRect rcClientOld; // 久客户区RECTCRect rcClientNew; // 加入TOOLBAR后的CLIENT RECTGetClientRect(rcClientOld); //// Called to reposition and resize control bars in the client area of a window// The reposQuery FLAG does not really traw the Toolbar. It only does the calculations.// And puts the new ClientRect v alues in rcClientNew so we can do the rest of the Math.//重新计算RECT大小RepositionBars(AFX_IDW_CONT ROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST,0,reposQuery,rcClientNew);// All of the Child Windows (Controls) now need to be moved so the Tollbar does not cov er them up. //所有的子窗口将被移动,以免被TOOLBAR覆盖// Offest to move all child controls after adding Tollbar//计算移动的距离CPoint ptOffset(rcClientNew.left-rcClientOld.left,rcClientNew.top-rcClientOld.top);CRect rcChild;CWnd* pwndChild = GetWindow(GW_CHILD); //得到子窗口while(pwndChild) // 处理所有子窗口{//移动所有子窗口pwndChild->GetWindowRect(rcChild);ScreenToClient(rcChild);rcChild.OffsetRect(ptOffset);pwndChild->MoveWindow(rcChild,FALSE);pwndChild = pwndChild->GetNextWindow();}CRect rcWindow;GetWindow Rect(rcWindow); // 得到对话框RECTrcWindow.right += rcClientOld.Width() - rcClientNew.Width(); // 修改对话框尺寸rcWindow.bottom += rcClientOld.Height() - rcClientNew.Height();Mov eWindow(rcWindow,FALSE); // Redraw WindowRepositionBars(AFX_IDW_CONT ROLBAR_FIRST,AFX_IDW_CONT ROLBAR_LAST,0);方法二:/dialog/dlgtoolstatusbar.asp--------------------------------------------------------------------------------11.响应对话框的最大化、最小化、关闭、恢复事件方法一:添加WM_SYSCOMMAND 消息映射函数v oid CTest6Dlg::OnSysCommand(UINT nID, LPARAM lParam) {if ( (nID & 0xFFF0) == IDM_ABOUTBOX ){CAboutDlg dlgAbout;dlgAbout.DoModal();}else{if ( nID == SC_MAXIMIZE ){AfxMessageBox(_T("最大化"));}else if ( nID == SC_MINIMIZE ){AfxMessageBox(_T("最小化"));}else if ( nID == SC_CLOSE ){AfxMessageBox(_T("关闭"));}CDialog::OnSysCommand(nID, lParam);}方法二:添加WM_SIZE 消息映射函数v oid CTest6Dlg::OnSize(UINT nT y pe, int cx, int cy){CDialog::OnSize(nT y pe, cx, cy);if ( nT y pe == SIZE_MAXIM IZED ){AfxMessageBox(_T("最大化"));}else if ( nT ype == SIZE_MINIMIZED ){AfxMessageBox(_T("最小化"));}else if ( nT ype == SIZE_RESTORED ){AfxMessageBox(_T("恢复"));}}--------------------------------------------------------------------------------12.代码实现窗口最小化,最大化,关闭PostMessage(WM_SYSCOMMAND, SC_MINIMIZE);PostMessage(WM_SYSCOMMAND, SC_MAXIMIZE);PostMessage(WM_SYSCOMMAND, SC_CLOSE);--------------------------------------------------------------------------------13.按下ESC和ENTER键时禁止关闭对话框方法一:(1) 重载OnCancel和OnOk,屏蔽其中的CDialog::OnCancel()和CDialog::OnOk();(2) 添加以下代码v oid CTest6Dlg::OnSysCommand(UINT nID, LPARAM lParam){if ((nID & 0xFFF0) == IDM_ABOUTBOX){CAboutDlg dlgAbout; //if you have an about dialogdlgAbout.DoModal();}else if ((nID & 0xFFF0) == SC_CLOSE){//用户点击右上角"X"EndDialog(IDOK);}else{CDialog::OnSysCommand(nID, lParam);}}方法二:BOOL CTest6Dlg::PreTranslateMessage(MSG* pM sg){if ( pMsg->message == WM_KEYDOWN ){switch(pMsg->wParam){case VK_ESCAPE:return T RUE; //直接返回TRUEbreak;case VK_RET URN:return T RUE;break;}}return CDialog::PreTranslateMessage(pM sg);}方法三:Q122489:How to Disable Default Pushbutton Handling for MFC Dialog/kb/122489/en-us--------------------------------------------------------------------------------14.在对话框中处理键盘鼠标消息处理PreTranslateMessage消息以下代码示例只演示了键盘WM_KEYDOWN消息,你也可以处理鼠标消息,比如WM_LBUTTONDOWN,WM_LBUTTONUP,WM_RBUTTONDOWN等。

VC++任务栏提示区图标的实现

VC++任务栏提示区图标的实现

VC++任务栏提示区图标的实现目前,许多应用软件都实现了WINDOW任务栏提示区图标,如金山词霸、超级解霸等,这不仅增强了软件的特色,更方便了用户的使用。

本文将介绍一个封装好的类,用VC++来实现这项功能,希望对读者有所帮助。

一、一个简单的直接引用的方法:我们可以使用直接引用WIN32 API函数的方法实现任务栏提示区图标。

1、定义一个NOTIFYICONDATA数据结构,初始化各数据项。

其结构详见在线帮助。

2、使用WIN32 API函数Shell_NotifyIcon实现任务栏提示区图标。

函数原形如下:WINSHELLAPI BOOL WINAPI Shell_NotifyIcon(DWORD dwMessage,//消息类型PNOTIFYICONDATA pnid //指向NOTIFYICONDATA结构的指针);消息类型包括:NIM_ADD 增加图标到任务栏;NIM_DELETE 从任务栏删除图标;NIM_MODIFY 修改任务栏图标;二、一个更好的面对对象的方法:为了使使用更加方便、合理,更符合面对对象的处理方法,我们应当封装一个类(CSystemIcon),由此类实现任务栏提示区图标。

1、由CObject类派生出CsystemIcon类。

2、构造下列函数:LRESULT OnIconNotification(WPARAM wID,LPARAM lEvent) //自定义消息处理函数void DeleteIcon() //删除图标void HideIcon() //隐藏图标void ShowIcon() //显示图标BOOL SetTooltipText(LPCTSTR pszTip) //设置提示文本BOOL SetTooltipText(UINT nID)CString GetTooltipText() const //得到提示文本BOOL SetNotificationWnd(CWnd* pWnd) //设置通知窗口CWnd* GetNotificationWnd() const //得到通知窗口HICON GetIcon() const //得到图标BOOL SetIcon(HICON hIcon) //设置图标BOOL SetIcon(LPCTSTR lpszIconName)BOOL SetIcon(UINT nIDResource)BOOL SetStandardIcon(LPCTSTR lpIconName) //设置系统标准图标BOOL SetStandardIcon(UINT nIDResource)3、生成的CsystemIcon类详见下列源文件:a、CsystemIcon类.H头文件://///////////////////////////////////////////////////////////////////////////// SystemIcon.h : header file//#ifndef _INCLUDED_SYSTEMICON_H_#define _INCLUDED_SYSTEMICON_H_/////////////////////////////////////////////////////////////////////////////// CSystemIcon windowclass CSystemIcon : public CObject// Construction/destructionpublic:CSystemIcon();CSystemIcon(CWnd* pWnd, UINT uCallbackMessage, LPCTSTR szTip, HICON icon, UINT uID); virtual ~CSystemIcon();// Operationspublic:BOOL Enabled() { return m_bEnabled; }BOOL Visible() { return !m_bHidden; }//创建系统图标Create(CWnd* pWnd, UINT uCallbackMessage, LPCTSTR szTip, HICON icon, UINT uID);//关于提示文本BOOL SetTooltipText(LPCTSTR pszTooltipText);BOOL SetTooltipText(UINT nID);CString GetTooltipText() const;//关于图标BOOL SetIcon(HICON hIcon);BOOL SetIcon(LPCTSTR lpIconName);BOOL SetIcon(UINT nIDResource);BOOL SetStandardIcon(LPCTSTR lpIconName);BOOL SetStandardIcon(UINT nIDResource);HICON GetIcon() const;void HideIcon();void ShowIcon();void DeleteIcon();//关于通知窗口BOOL SetNotificationWnd(CWnd* pNotifyWnd);CWnd* GetNotificationWnd() const;//自定义消息处理函数virtual LRESULT OnIconNotification(WPARAM uID, LPARAM lEvent);// Overrides// ClassWizard generated virtual function overrides//{{AFX_VIRTUAL(CSystemIcon)//}}AFX_VIRTUAL// Implementationprotected:BOOL m_bEnabled; //是否支持图标BOOL m_bHidden; //是否隐藏图标NOTIFYICONDATA m_tnd; //数据结构,请参考在线帮助DECLARE_DYNAMIC(CSystemIcon)};#endif/////////////////////////////////////////////////////////////////////////////b、CsystemIcon类.CPP源文件:// SystemIcon.cpp : implementation file#include "stdafx.h"#include "SystemIcon.h"#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE[] = __FILE__;#endifIMPLEMENT_DYNAMIC(CSystemIcon, CObject)/////////////////////////////////////////////////////////////////////////////CSystemIcon::CSystemIcon()memset(&m_tnd, 0, sizeof(m_tnd));m_bEnabled = FALSE;m_bHidden = FALSE;CSystemIcon::CSystemIcon(CWnd* pWnd, UINT uCallbackMessage, LPCTSTR szToolTip, HICON icon, UINT uID)Create(pWnd, uCallbackMessage, szToolTip, icon, uID);m_bHidden = FALSE;BOOL CSystemIcon::Create(CWnd* pWnd, UINT uCallbackMessage, LPCTSTR szToolTip, HICON icon, UINT uID)//文件只能使用在WINDOW 95以上的版本中VERIFY(m_bEnabled = ( GetVersion() & 0xff ) >= 4);if (!m_bEnabled) return FALSE;//确认通知窗口有效VERIFY(m_bEnabled = (pWnd && ::IsWindow(pWnd->GetSafeHwnd())));if (!m_bEnabled) return FALSE;//确认自定义消息大于WM_USERASSERT(uCallbackMessage >= WM_USER);//确定提示文本长度小于64ASSERT(_tcslen(szToolTip) <= 64);//定义NOTIFYICONDATA结构的数据项m_tnd.cbSize = sizeof(NOTIFYICONDATA);m_tnd.hWnd = pWnd->GetSafeHwnd();m_tnd.uID = uID;m_tnd.hIcon = icon;m_tnd.uFlags = NIF_MESSAGE | NIF_ICON | NIF_TIP;m_tnd.uCallbackMessage = uCallbackMessage;strcpy (m_tnd.szTip, szToolTip);//设置图标VERIFY(m_bEnabled = Shell_NotifyIcon(NIM_ADD, &m_tnd));return m_bEnabled;CSystemIcon::~CSystemIcon()DeleteIcon();void CSystemIcon::DeleteIcon()if (!m_bEnabled) return;m_tnd.uFlags = 0;Shell_NotifyIcon(NIM_DELETE, &m_tnd);m_bEnabled = FALSE;void CSystemIcon::HideIcon()if (m_bEnabled && !m_bHidden) {m_tnd.uFlags = NIF_ICON;Shell_NotifyIcon (NIM_DELETE, &m_tnd);m_bHidden = TRUE;void CSystemIcon::ShowIcon()if (m_bEnabled && m_bHidden) {m_tnd.uFlags = NIF_MESSAGE | NIF_ICON | NIF_TIP;Shell_NotifyIcon(NIM_ADD, &m_tnd);m_bHidden = FALSE;BOOL CSystemIcon::SetIcon(HICON hIcon)if (!m_bEnabled) return FALSE;m_tnd.uFlags = NIF_ICON;m_tnd.hIcon = hIcon;return Shell_NotifyIcon(NIM_MODIFY, &m_tnd);BOOL CSystemIcon::SetIcon(LPCTSTR lpszIconName)HICON hIcon = AfxGetApp()->LoadIcon(lpszIconName);return SetIcon(hIcon);BOOL CSystemIcon::SetIcon(UINT nIDResource)HICON hIcon = AfxGetApp()->LoadIcon(nIDResource);return SetIcon(hIcon);BOOL CSystemIcon::SetStandardIcon(LPCTSTR lpIconName)HICON hIcon = LoadIcon(NULL, lpIconName);return SetIcon(hIcon);BOOL CSystemIcon::SetStandardIcon(UINT nIDResource)HICON hIcon = LoadIcon(NULL, MAKEINTRESOURCE(nIDResource)); return SetIcon(hIcon);HICON CSystemIcon::GetIcon() constHICON hIcon = NULL;if (m_bEnabled)hIcon = m_tnd.hIcon;return hIcon;BOOL CSystemIcon::SetTooltipText(LPCTSTR pszTip)if (!m_bEnabled) return FALSE;m_tnd.uFlags = NIF_TIP;_tcscpy(m_tnd.szTip, pszTip);return Shell_NotifyIcon(NIM_MODIFY, &m_tnd);BOOL CSystemIcon::SetTooltipText(UINT nID)CString strText;VERIFY(strText.LoadString(nID));return SetTooltipText(strText);CString CSystemIcon::GetTooltipText() constCString strText;if (m_bEnabled)strText = m_tnd.szTip;return strText;BOOL CSystemIcon::SetNotificationWnd(CWnd* pWnd)if (!m_bEnabled) return FALSE;ASSERT(pWnd && ::IsWindow(pWnd->GetSafeHwnd()));m_tnd.hWnd = pWnd->GetSafeHwnd();m_tnd.uFlags = 0;return Shell_NotifyIcon(NIM_MODIFY, &m_tnd);CWnd* CSystemIcon::GetNotificationWnd() constreturn CWnd::FromHandle(m_tnd.hWnd);LRESULT CSystemIcon::OnIconNotification(UINT wParam, LONG lParam)if (wParam != m_tnd.uID)return 0L;CMenu menu, *pSubMenu;//单击右键弹出菜单if (LOWORD(lParam) == WM_RBUTTONUP)if (!menu.LoadMenu(m_tnd.uID)) return 0;if (!(pSubMenu = menu.GetSubMenu(0))) return 0;//设定第一项为缺省::SetMenuDefaultItem(pSubMenu->m_hMenu, 0, TRUE);//定义弹出菜单CPoint pos;GetCursorPos(&pos);::SetForegroundWindow(m_tnd.hWnd);::TrackPopupMenu(pSubMenu->m_hMenu, 0, pos.x, pos.y, 0, m_tnd.hWnd, NULL); ::PostMessage(m_tnd.hWnd, WM_NULL, 0, 0);menu.DestroyMenu();else if (LOWORD(lParam) == WM_LBUTTONDBLCLK)if (!menu.LoadMenu(m_tnd.uID)) return 0;if (!(pSubMenu = menu.GetSubMenu(0))) return 0;//双击左键起动缺省菜单::SetForegroundWindow(m_tnd.hWnd);::SendMessage(m_tnd.hWnd, WM_COMMAND, pSubMenu->GetMenuItemID(0), 0); menu.DestroyMenu();return 1;三、一个简单的例子1、使用MFC AppWizard(EXE)创建项目文件。

VC经验技巧:标题栏、按钮、菜单等。-wonsoft的专栏-CSDN博客

VC经验技巧:标题栏、按钮、菜单等。-wonsoft的专栏-CSDN博客

VC经验技巧:标题栏、按钮、菜单等。

-wonsoft的专栏-CSDN博客VC经验技巧1.窗口最大最小化按纽的控制①怎样在程式开始的时候让他最大化?②vC++做出来的exe文档在窗体的右上方是没有最大化和最小化按钮的,怎样实现这一功能?③如何在显示窗口时,使最大化按钮变灰?①在App类里的C…App::InitInstance()中把m_pMainWnd->ShowWindow(SW_SHOW)改成m_pMainWnd->ShowWindow(SW_MAXIMIZE);②在CreateWidnow时用WS_SYSMENU|WS_MINIMIZEBOX|WS_MAXIMIZEBOX 风格.③ 第一种方法:BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs) {if( !CFrameWnd::PreCreateWindow(cs) )return FALSE;// TODO: Modify the Window class or styles here by modifying// the CREATESTRUCT cs// disable the maxmini boxcs.style &= ~WS_MAXIMIZEBOX;return TRUE;}第二种方法:CMenu*pMenu=AfxGetApp()->m_pMainWnd->GetSystemMenu(FALSE );int x=pMenu->GetMenuItemCount( );UINT pID=pMenu->GetMenuItemID(x-1);pMenu->EnableMenuItem(pID, MF_DISABLED);第三种方法:ModifyStyle(WS_MAXIMIZEBOX, 0);这个函数也能够是最大化按钮失效!并且能够在程式中动态的改变窗口的风格2.创建动态菜单void CMainFrame::OnSelectState(NMTOOLBAR* pnmtb, LRESULT *plr){CMenu menu;if(!menu.CreateMenu())return;menu.AppendMenu(MF_STRING,0,"开始");menu.AppendMenu(MF_STRING,0,"结束");CRect rc;m_wndT oolBar.SendMessage(TB_GETRECT, pnmtb->iItem, (LPARAM)&rc);m_wndT oolBar.ClientToScreen(&rc);menu.TrackMenu( TPM_LEFTALIGN | TPM_LEFTBUTTON | TPM_VERTICAL,rc.left, rc.bottom, this, &rc);// menu.DestroyMenu();menu.detach();}3.如何禁止对话框关闭按钮和浮动工具条上的系统菜单1、禁止对话框中的关闭按钮有二种方法。

vc++2010环境软件使用方法

vc++2010环境软件使用方法

上机考试新版题库-二级C语言程序设计1.5 Visual C++ 2010基本操作这篇文章主要是针对初次接触Visual C++2010的读者,为使他们对Visual C++2010及其基本操作有一个初步的了解,故从界面上主要按钮的功能和基本操作流程两个内容进行说明。

1. Visual C++ 2010操作界面从“开始”—所有程序—Microsoft Visual Studio 2010 Express—Microsoft Visual C++ 2010 Express。

启动后,会进入如图1-8所示的主窗口。

图1-8 Visual C++ 2010主窗口(1)标题栏Visual C++ 2010主窗口的第一行就是标题栏。

标题栏的左边显示当前文件的文件名以及版本信息,默认文件名是“起始页”。

(2)菜单栏标题栏下面依次是菜单栏和工具栏。

各菜单的功能如下:●文件(File):是用来创建、打开、保存项目文件,也是必须要做的第一步;●编辑(Edit):是用来编辑文件;●视图(View):是用来查看代码,显示其他窗口,打开/关闭工具栏;●项目(Project):是用来添加类、添加新项和设置启动项(注意:该项只有在新建项目或打开项目时才会出现);●调试(debug):用来设置项目的各项配置,编译、创建和执行应用程序、调试程序;●工具(Tools):是用来对工具栏、菜单以及集成开发环境进行定制;●窗口(Windows):是用来新建/拆分窗口和窗口布局;●帮助(Help):是给出相关的帮助。

(3)工具栏工具栏和菜单栏的作用是一样的,只不过工具栏是把菜单栏中经常用到的编辑功能选出来并用图形表示,方便我们操作。

Visual C++2010有多个工具栏,常有的有标准工具栏和文本编辑器工具栏。

图1-9所示的就是一个标准工具栏。

图1-9 标准工具栏标准工具栏按钮的功能,各个按钮的功能从左到右分别如下:●创建一个新项目;●添加新项●打开一个已经保存了的文件;●保存当前文件;●保存所有文件;●剪切选定内容到剪切板;●复制选定内容到剪切板;●在当前位置粘贴剪切板中的内容;●撤销上一次操作;●重做被撤销的操作;●启动调试程序;●配置解决方案;●设置解决方案平台;●在文件中查找。

VC++中添加工具栏和状态栏

VC++中添加工具栏和状态栏

VC++中添加工具栏和状态栏VC++中添加工具栏方法1、使用VC生成的工具栏通过VC资源窗口insert一个工具栏资源IDR_TOOLBAR1,并进行编辑为对话框类添加一个工具栏变量CToolBarm_T oolBar;在OnInitDialog()函数中添加如下代码,添加显示工具栏if(!m_T oolbar.CreateEx( this,TBSTYLE_FLAT , WS_CHILD | WS_VISIBLE |CBRS_ALIGN_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS, CRect(4,4,0,0))||!m_Toolbar.LoadToolBar(IDR_TOOLBAR1) ){TRACE0("failedto create toolbar\n");returnFALSE;}m_T oolbar.ShowWindow(SW_SHOW);RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CO NTROLBAR_LAST, 0);2、通过图像列表自定义工具栏通过VC资源窗口insert所需的ico文件,并分别命名为对话框类添加工具栏变量和图像列表变量CToolBarm_T oolBar;CImageListm_ImageList;在OnInitDialog()函数中添加如下代码,将图像列表与工具栏关联并进行显示//创建图像列表m_ImageList.Create(32,32,ILC_COLOR24|ILC_MASK,1,1);//向图像列表中添加图标m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICONUSER));m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICONSET));m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICONQUERY));m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICONRECOR D));m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICONIMPORT ));m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICONEXPORT ));UINTarray[8];for(inti=0;i<8;i++) //初始化工具栏ID{if(i==2|| i==5)array[i]= ID_SEPARATOR; //第3、6个按钮为分隔条elsearray[i]= i+1001;}m_T oolBar.Create(this);m_T oolBar.SetButtons(array,8);//关联图像列表m_T oolBar.GetT oolBarCtrl().SetImageList(&m_ImageList);m_T oolBar.SetSizes(CSize(50,60),CSize(32,32));//设置按钮和图标的大小/*The sizeImage parameter must contain thesize, in pixels, of the images in the toolbar's bitmap.The dimensions in sizeButton must besufficient to hold the image plus 7 pixels extra in width and 6 pixels extra inheight.This function also sets the toolbar heightto fit the buttons.*/ //设置工具栏按钮的显示文本m_T oolBar.SetButtonText(0," 用户 ");m_T oolBar.SetButtonText(1," 设置 ");m_T oolBar.SetButtonText(3," 查询 ");m_T oolBar.SetButtonText(4," 记录 ");m_T oolBar.SetButtonText(6," 导入 ");m_T oolBar.SetButtonText(7," 导出 ");RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CO NTROLBAR_LAST,0);3、导入图片生成工具栏,并将工具栏与菜单栏对应项绑定通过VC资源窗口insert所需的ico文件,并分别命名,然后insert一个菜单资源IDR_MAINFRAME_MENU,并进行编辑为对话框类添加菜单栏变量、工具栏变量和图像列表变量CMenum_Menu;CToolBarm_T oolBar;CImageListm_ImageList;在OnInitDialog()函数中添加如下代码,将图像列表与工具栏关联,并将工具栏和对应菜单项ID进行关联,从而与菜单项共用处理函数m_Menu.LoadMenu(IDR_MAINFRAME_MENU);SetMenu(&m_Menu);TBBUTTONtbButton[ICONSUM] = {0};m_ImageList.Create(32,32, ILC_COLOR32 | ILC_MASK, 0, 0);m_ImageList.Add(::AfxGetApp()->LoadIcon(IDI_ICON3));m_ImageList.Add(::AfxGetApp()->LoadIcon(IDI_ICON1));m_ImageList.Add(::AfxGetApp()->LoadIcon(IDI_ICON4));m_ImageList.Add(::AfxGetApp()->LoadIcon(IDI_ICON5));m_ImageList.Add(::AfxGetApp()->LoadIcon(IDI_ICON2));m_T oolBar.Create(WS_CHILD| WS_VISIBLE, CRect(0, 0, 0, 0), this, 0);m_T oolBar.SetImageList(&m_ImageList);for(inti=0; i< ICONSUM; i++){tbButton[i].dwData = NULL;tbButton[i].fsState = TBSTATE_ENABLED;tbButton[i].fsStyle = (BYTE)TBSTYLE_FLAT;tbButton[i].iBitmap = i;}tbButton[0].idCommand= ID_ATTENDANCE_RECORD;tbButton[1].idCommand= IDM_REQUEST_EMPLOYEE;tbButton[2].idCommand= IDM_PAYLIP;tbButton[3].idCommand= IDM_PORTFOLIO;tbButton[4].idCommand= ID_ABOUT;m_T oolBar.AddButtons(ICONSUM,tbButton);m_T oolBar.AutoSize();m_T oolBar.SetStyle(TBSTYLE_FLAT| CCS_TOP);注:若要把工具栏的按钮和菜单项相关联,也可将它们的ID设置为同一个ID来实现VC++中添加状态栏方法转自:/show_it/item/2a12a5dd72ef2517e1f46f20方法一:1.添加成员变量CStatusBarCtrl m_StatusBar;2.在OnInitDialog()中加入:m_StatusBar.Create(WS_CHILD|WS_VISIBLE|SBT_OWNERDRA W,CRect(0,0,0,0), this, 0);intstrPartDim[3]= {100, 200, -1}; //分割数量m_StatusBar.SetParts(3,strPartDim);//设置状态栏文本m_StatusBar.SetText("分栏一", 0, 0);m_StatusBar.SetText("分栏二", 1, 0);m_StatusBar.SetText("分栏三", 2, 0);//下面是在状态栏中加入图标m_StatusBar.SetIcon(1,SetIcon(AfxGetApp()->LoadIcon(IDR_ MAINFRAME),FALSE));//为第二个分栏中加的图标方法二:1.添加成员变量CStatusBar m_wndStatusBar;2.在OnInitDialog()中加入:static UINT indicators[] ={D_SEPARATOR, //status line indicatorID_INDICATOR_CAPS, //CAP lock indicator.ID_INDICATOR_NUM, //NUM lock indicator.ID_INDICATOR_SCRL, //SCRL lock indicator.};if(!m_wndStatusBar.Create(this)||!m_wndStatusBar.SetIndicat ors(indicators,sizeof(indicators)/sizeof(UINT))){TRACE0("Failed to create statusbarn");return -1; // fail to create}UINT nID; //控制状态栏里面的分栏m_wndStatusBar.SetPaneInfo(0,nID,SBPS_STRETCH|SBPS_NO BORDERS,100); //返回值存nID中m_wndStatusBar.SetPaneText(0,"就绪");m_wndStatusBar.SetPaneInfo(1,nID,SBPS_NORMAL,100);m_wndStatusBar.SetPaneText(1,"大写");m_wndStatusBar.SetPaneInfo(2,nID,SBPS_POPOUT,100);m_wndStatusBar.SetPaneText(2,"数字");// SetPaneInfo()函数的第三个参数的可选项如下:// The following indicator styles are supported:// SBPS_NOBORDERS No 3-D border around the pane.// SBPS_POPOUT Reverse border so that text "pops out."// SBPS_DISABLED Do not draw text.// SBPS_STRETCH Stretch pane to fill unused space. Only one pane per status bar can have thisstyle.// SBPS_NORMAL No stretch, borders, or pop-out.//----------------让这个状态栏最终显示在对话框中------------- RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CO NTROLBAR_LAST,0);。

Android五种隐藏状态栏和标题栏的方法

Android五种隐藏状态栏和标题栏的方法

Android五种隐藏状态栏和标题栏的⽅法Android五种隐藏状态栏和标题栏的⽅法⽅法⼀:public class MainActivity extends Activity{@Overrideprotected void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);// 隐藏标题栏requestWindowFeature(Window.FEATURE_NO_TITLE);// 隐藏状态栏getWindow().setFlags(youtParams.FLAG_FULLSCREEN,youtParams.FLAG_FULLSCREEN);setContentView(yout.activity_main);}}⽅法⼆:<!-- 同时隐藏状态栏和标题栏 --><activityandroid:name="com.ysj.demo.MainActivity"android:theme="@android:style/Theme.NoTitleBar.Fullscreen"android:label="@string/app_name" ><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="UNCHER" /></intent-filter></activity>⽅法三:<!-- Application theme. --><style name="AppTheme" parent="AppBaseTheme"><!-- All customizations that are NOT specific to a particular API-level can go here. --><!-- 隐藏状态栏 --><item name="android:windowFullscreen">true</item><!-- 隐藏标题栏 --><item name="android:windowNoTitle">true</item></style>⽅法四:动态显⽰隐藏状态栏//隐藏状态栏youtParams lp = context.getWindow().getAttributes();lp.flags |= youtParams.FLAG_FULLSCREEN;context.getWindow().setAttributes(lp);//显⽰状态栏youtParams attr = context.getWindow().getAttributes();attr.flags &= (~youtParams.FLAG_FULLSCREEN);context.getWindow().setAttributes(attr);⽅法五:动态显⽰隐藏状态栏View类提供了setSystemUiVisibility和getSystemUiVisibility⽅法,这两个⽅法实现对状态栏的动态显⽰或隐藏的操作,以及获取状态栏当前可见性。

VC怎样隐藏控制台窗口

VC怎样隐藏控制台窗口

自己的总结:平台:Windows Sever2003环境:Visual Studio 2008在项目属性中如下两步操作:【链接器】——【系统】——【子系统】:/SUBSYSTEM:WINDOWS 【链接器】——【高级】——【入口点】:mainCRTStartupVC++ 隐藏控制台程序窗口大家都知道,当编写一个win32 console application时,当运行此类程序的时候默认情况下会有一个类似dos窗口的console窗口,但是有的时候我们只想在程序中运行一段功能代码,不希望显示这个console窗口,让代码执行完毕之后程序自动退出.下面就介绍一下,如何隐藏win32 console application的console窗口因为此种方法是通过设置编译器的链接开关来实现,所以让我们来看一下编译器的链接开关选项(也就是linker选项).首先我们来看一下linker的/subsystem 选项该选项的语法形式如下:/subsystem:{console|efi_application|efi_boot_service_driver|efi_rom|efi_runtime_driver|native|posix|windows|windowsce}[,major[.minor]]这个链接选项告诉操作系统如何运行可执行文件console:win32 字符模式应用程序,此种类型的应用程序在运行的时候会产生一个类似dos窗口的控制台窗口,如果在应用程序的主函数为main()或者wmain(),在默认情况下该应用程序就是一个控制台应用程序extensible firmware interface和cpu具体架构相关的一个参数选项,并不常用,在这里暂不详细介绍.如果对此有兴趣的可以访问intel主页来查看相关内容native;设备驱动器选项,如果/driver:wdm选项被设定的话,该链接选项(native)就为默认选项posix:在windows nt 种运行在posix子系统上的应用程序windows:该类型的应用程序不产生console窗口,该类型的应用程序的窗口由用户自己创建,简而言之就是一个标准的win32 application,其入口地址为winmain()函数或者wwinmain()函数的地址如果你在应用程序种定义的主函数为winmain或者wwinmain,在默认情况下该应用程序就是一个win32 application !windowsce:运行在windows ce上的应用程序major and minor (optional):主版本号和次版本号,该选项为可选,该选项为0~65535之间的十进制整数从上面可以看出如果我们建立一个win32 console application的话,linker的/subsystem选项应该为console,可以在vc开发环境的project->setting->link->project option中看到!接下来我们再看看应用程序是如何运行的!我们知道用vc编写的程序,运行的时候是需要cc 运行库支持的.当我们运行一个c/c 程序的时候链接器会首先寻找应用程序的启动函数,例如:如果你建立了一个console程序的话,编译器得链接开关会是以下这种形式/subsystem:console /entry:maincrtstartup (ansi)/subsystem:console /entry:wmaincrtstartuup (unicode)如果你建立了一个win32 application,编译器得链接开关则会是一下形式/subsystem:windows /entry:winmain (ansi)/sbusystem:windows /entry:wwinmain (uincode)上面的两种形式可以再project->setting->link->project option中看到上面的subsystem和entry并不需要都设置,如果你只设置了/subsystem:console的话,那么默认的entry开关在默认情况下应为/entry:maincrtstartup反之,如果你在应用程序中定义了main函数的话,默认情况下,你的/subsystem开关应该为/system:console在默认情况下/subsystem 和/entry开关是匹配的,也就是console对应maincrtstartup或者wmaincrtstartupwindows对应winmain或者wwinmain但是我们也可以通过手动改动的方式使他们不匹配例如我们可以这样改动#pragma comment( linker, /subsystem:windows /entry:maincrtstartup ) // 设置入口地址int main(int argc, char* argv[]){messagebox(null, hello, notice, mb_ok);return 0;}在默认情况下链接器看到/subsystem下是windows选项的时候,它会自动寻找winmain 或者wwinmain但我们强制指定入口地址,这样运行程序的时候默认的console窗口就会隐藏!上面是在代码中使用#pragma指令来设置,还有一种就是直接在开发环境的project->setting->link->project option中手工改动!写了这么多,自己都有点感觉乱,没有办法,以前没写过什么文章,所以措辞可能不太好,希望大家见谅。

VC++_第2章_菜单、工具栏和状态栏的设计

VC++_第2章_菜单、工具栏和状态栏的设计

第2章菜单、工具栏和状态栏的设计例2.2 在顶层菜单栏里建立一个菜单项,并在其下面建立带有子菜单的菜单项,使有的子菜单具有加速键、变灰和核对符,又使每个子菜单都能显示信息。

步骤如下:(1)建一个单文档的应用程序(或用例2.1程序),名为:山东旅游(2)建立菜单:1)ResourceView→Menu→IDR_MAINFRAME→右面出现菜单编辑器→左键选中顶层最后的空白菜单不放,将其拖到“帮助”的前面,松开鼠标(或选中“帮助”菜单,按Insert键)。

双击这个空白菜单,出现“菜单属性对话框”,在Caption处写:山东旅游(&S)→ Pop_up 处于选中状态(屏蔽ID)→退出。

2)双击下面出现的空白菜单,出现“菜单属性对话框”,选中Pop_up(屏蔽ID)→Capton 处写:烟台(&Y)3)右边出现空白子菜单,双击它,出现“菜单属性对话框”→ID处写:ID_SD_YT_PL→Capton处写:蓬莱Ctrl +F5 (注:Ctrl +F5是加速键标识)→注释栏prompt 处写:蓬莱仙境4)双击“蓬莱”下面的子菜单,双击它,出现“菜单属性对话框”→ID处写:ID_SD_YT_NS→Capton处写:南山(&N)→prompt处写:南山大佛5)双击“烟台”下面的空白菜单, 出现“菜单属性对话框”→选中Pop up(屏蔽ID)→Capton 处写:青岛(&Q)6)右边出现空白子菜单,双击它,出现“菜单属性对话框”→ID处写:ID_SD_QD_LS→Capton处写:崂山Ctrl +F6→prompt处写:崂山道士表2. 1 菜单General属性对话框的各项含义项目含义ID 菜单的资源ID标识符Caption(标题)用于标识菜单项显示文本,助记符字母前面须有一个&符号,这个字母与Alt构成组合键Separator(分隔符)选中时,菜单项是一个分隔符或一条水平线Checked(选中的)选中时,菜单项文本前显示一个选中标记Pop_up(弹出)选中时,菜单项含有一个弹出式子菜单Grayed(变灰)选中时,菜单项显示是灰色的,用户不能选用Inactive(非激活)选中时,菜单项没有被激活,用户不能选用Help(帮助)选中时,菜单项在程序运行时被放在顶层菜单的最右端Break(暂停)当为Column时,对于顶层菜单项来说,被放置在另外一行上,而对于弹出式子菜单的菜单项来说,则被放置在另外一列上,当为Bar时,与Column相同,只不过对于弹出式子菜单来说,它还在新列与原来的列之间增加一条竖直线,注意:这些效果只能在程序运行后才能看到。

VC++工具栏与状态栏

VC++工具栏与状态栏
BOOL Create(CWnd*pParentWnd, DWORD dwStyle=WS_CHILD|WS_VISIBLE| CBRS_BOTTOM,UINT nID = AFX_IDW_STATUS_BAR); 其中参数pParentWnd为指向父窗口CWnd对象的
指针;dwStyle指定状态栏的风格,除了标准的 Windows风格外,还可以是CBRS_TOP(状态栏
既然我们已经取得应用程序的指针所以马上就能得到应用程序对象的公共数据成员mpmainwnd它是一个指向cwin应用程序的主窗口的指针利用这个指针我们又可使用该指针所指向的对象cwin对象的成员函数getdescendantwindow这个函数的作用是求得某个子窗口即状态栏这个窗口的指针
工具栏与状态栏
BOOL LoadToolBar(LPCTSTR lpszResourceName);
BOOL LoadToolBar(UINT nIDResource); 参数lpszResourceName指向被重载的工具栏 资源名字的指针,参数nIDResource为被重 载的工具栏资源的ID。
13
14
2 状态栏
lpIDArray所指向的数组元素的个数。该函数按照 数组lpIDArray中的对应元素的值设定标识符ID
19
的值,加载由每个ID所指定的字符串资源,并把字 符串设置为标识符的文字。如果该函数操作成功, 在返回一个非0值,否则返回0。 2、SetPaneInfo()函数
函数SetPaneInfo()用于设置给定索引值的指示器 ID、风格和宽度。它的原型为:
6
工具栏按钮可以以按钮、复选框或单选框的形 式出现和起作用,默认情况下以按钮形式出现。 若想让工具栏按钮以复选框形式出现时,应将风 格TBBS_ CHECKBOX赋给该CToolBar对象或在一个 ON_UNDATE_COMMAND_UI处理程序中使用某个 CCmdUI对象的SetCheck函数;如果按钮为单选框 形式,那么应在命令更新处理函数中调用 CCmdUI::SetRadio。

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框架,具体实现可能因应用程序的需求而有所不同。

vc的菜单,工具栏

vc的菜单,工具栏

vc的菜单,⼯具栏⾸先,MFC会⾃动⽣成⼀些菜单,我们也可以在resource view中添加菜单。

点击菜单栏属性--〉左上⾓校园最图形,可以将属性页显⽰。

不会随着菜单项变动丢失。

ID号变灰的栏是不可以编辑的。

是弹出的POPUP菜单。

它不能被⽤来做响应。

⼤写字母标⽰资源。

IDI IDC IDM分别表⽰不同的类型资源。

⼀个菜单项可以由CMAINFRAM CXXXVIEW CXXApp CXXDOC view类先对其响应,接着doc类对其进⾏响应,MAINFRAM第三个对其进⾏响应,第四个响应的APP类对其进⾏响应。

Afxmessagebox框架函数,可以响应⾮WND派⽣类的弹出的提⽰,⽽wnd派⽣的可以直接⽤MessageBox函数。

消息包括三类:WM_XXX标准消息,从cwnd派⽣的类可以接收也可以接受命令消息,WM_COMMANed命令消息(通过ID号标识识别,由cmdtarget派⽣的类可以接受,⽐如说⽂档类,CEIDTview类),第三类通知消息,有cmdtarget派⽣的类可以接收。

APP和Doc类从CMDTARGET派⽣,所以不能接收标准消息。

命令消息,头⽂件消息影射中添加原形,原⽂件中添加ON_COMMND宏完成影射,还有命令函数实现。

命令函数由ONCOMMAND来处理,通知消息由ONNOTIFY来实现。

命令消息到来时⾸先到达CMAINFRAM然后到送达CVIEW 来处理,根据命令消息影射来处理,如果没有处理函数,交给DOC类,如果还没有处理函数,交还给VIEW类,------〉交还CMAINFRAM 类,如果他也没有处理函数,交给APP类来处理。

标记菜单(打对购得):在CMAINFRAM中ONCREATE中创建。

菜单属于框架窗⼝,获取菜单栏指针的⽅法为GetMenu,它返回⼀个返回CMenu的指针。

但是其指向的对象是不⼀样的,⼀个为菜单,⼀个为⼦菜单。

CMenu中的checkmenuitem⽅法可以设置标记。

VC++的菜单与工具栏使用方法解析

VC++的菜单与工具栏使用方法解析

m_rectangle = TRUE; m_ellipse =FALSE; dc.SelectObject(pOldBrush); dc.SelectObject(oldpen); delete pNewBrush;
}
对应的更新命令UI控制函数OnUpdateGraphEllipse , 根据变量m_ellipse的值来控制菜单的有效性状态, 决定菜单项“ellipse”什么时候有效
CWnd*pWnd, LPCRECT lpRct=NULL); 其中参数nFlags为弹出式菜单的标志,例如若其值为 TPM_RIGHTALIGN,表示创建的弹出式浮动菜单,其右边 界位于X处;若其值为TPM_LEFTALIGN,表示其左边界位 于X处,参数X与Y表示屏幕坐标。
(1)浮动菜单的创建
对应的更新命令UI控制函数 OnUpdateGraphRec根据变量m_rectangle的值 来控制菜单的有效性状态,决定菜单项 “rectangle ”什么时候有效。
void CMenuitemView::OnUpdateGraphRec(CCmdUI*pCmdUI)
{ pCmdUI->Enable(m_rectangle);
CBrush* pNewBrush, * pOldBrush; pNewBrush=new CBrush; pNewBrush->CreateSolidBrush(m_crbk); pOldBrush=dc.SelectObject(pNewBrush); dc.Ellipse(230,70,310,150);
如果菜单项有更新处理函数,那么它被调用进行 更新;如果没有,那么框架检查命令处理函数是否 存在,若不存在,则使菜单变灰。
必须提供一个菜单处理函数或更新函数。

vc修改标题栏的名称和图标(1)(转载)

vc修改标题栏的名称和图标(1)(转载)

vc修改标题栏的名称和图标(1)(转载)vc修改标题栏的名称和图标1 单文档接口(SDI)典型窗口标题的改变用VC的AppWizard创建一个名为"Exam“的单文档类型的工程。

开始运行时,程序主窗口标题形式如下:Untitled-Exam其中"Untitied"为文档标题,"Exam"为主窗口标题。

当用"File-Open ” 打开"my.exm"文裆以后,文档标题变为"my.exm"。

所以程序主窗口标题栏的一般形式为:文档标题—主窗口标题1.1 文档标题的改变文档标题是由工程中相应的文档类所控制的,所以就可在相应的文档类中,利用SetTitle()函数来改变文档标题。

例:改变CExamDoc::onNewDocument()函数为:BOOL CExamDoc::OnNewDocument(){if(!CDocument::OnNewDocument())return FALSE;SetTitle("文档标题");return TRUE;}运行程序,则每次选择选单中的"文件"的"新建"选项时,标题就变成"文档标题-Exam ”1.2 主窗口标题的改变主窗口的标题默认是工程的文件名,改变主窗口的标题方法有两种:第一种方法:利用ResourceView打开工程的资源,修改String Table中的IDR_MAINFRAME的值。

将原来的"Exam\n\nExam\nEXMFile(*.exm)\n.exm\nExam.Document\nExam Document"改为"标题改变示例\n\nExam\nEXM File(*.exm)\n.exm\nExam.Document\nExam Document"。

VC++实例(图标-光标-菜单-状态栏)

VC++实例(图标-光标-菜单-状态栏)
(1)改变光标形状
在资源面板插入光标文件(*.cur) 在类向导中给视图类(CMyView)添加消 息WM_SETCURSOR添加消息处理函数; 编写消息处理函数; BOOL CDeView::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message) { }
m_point=point;
CView::OnMouseMove(nFlags, point); }
添加并编写消息处理函数 OnSetCursor()
HCURSOR m_c; if(rt.PtInRect(m_point)) { m_c=AfxGetApp()>LoadCursor(IDC_CURSOR1); SetCursor(m_c); return true; }
(3)通过菜单变换图标 )
在资源面板中插入两个图标文件(*.ICO) 在资源面板中创建"图标"菜单,并建立 两个菜单项(光盘和软盘) 给菜单项添加消息处理函数; 编写消息处理函数.
代码如下
HICON hIcon; hIcon=AfxGetApp()->LoadIcon(IDI_ICON1); AfxGetMainWnd()->SetIcon(hIcon,FALSE);
添加修改OnMouseMove()函 添加修改OnMouseMove()函 OnMouseMove() 数
void CXx1View::OnMouseMove(UINT nFlags, CPoint point) { // TODO: Add your message handler code here and/or call default
编写消息处理函数
在MainFrame类中添加消息WM_TIMER的 休息处理函数 OnTimer( ),代码如下: CTime tm; CString str; tm=CTime::GetCurrentTime(); str=tm.Format("%H:%M:%S"); m_wndStatusBar.SetPaneText(1,str);

利用VC在前台窗体的标题栏中实现滚动字幕

利用VC在前台窗体的标题栏中实现滚动字幕

利用VC在前台窗体的标题栏中实现滚动字幕
张凌晓
【期刊名称】《《电脑知识与技术》》
【年(卷),期】2003(000)005
【摘要】目前你能够在很多地方看到滚动字幕的效果,如网页中的滚动字幕效果,单词背诵软件中的滚动的单词效果等,滚动的样式也各种各样,这些字幕效果不仅能增加程序外观的动态效果,而且有时还能实现程序主要的功能。

这些效果如果用某些语言如C语言、Java来实现是很困难的,而且要写很长的代码,但用VC、C#等语言来实现则很简单,现在就让我们来看看用VC是如何实现的。

【总页数】1页(P64)
【作者】张凌晓
【作者单位】
【正文语种】中文
【中图分类】TP311.1
【相关文献】
1.Delphi中利用Tbitmap实现窗体图形动态打印 [J], 李建武
2.在VB中利用Windows API实现特殊窗体 [J], 李敬文;张世民
3.VB中利用API函数实现字型窗体 [J], 廖治凯
4.Word中利用“窗体”实现轻松输入 [J], 邹益民
5.利用二次开发技术在AutoCAD中实现快速绘制标题栏 [J], 莫玉梅;甘文的
因版权原因,仅展示原文概要,查看原文内容请购买。

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