修改MFC AppWizard向导生成的框架程序的外观和大小

原创 2006年05月21日 21:13:00

如何修改MFC AppWizard向导生成的框架程序的外观和大小,修改图标、光标、背景的三种方法。如何增加和删除工具栏按钮,如何给应用程序增加工具栏,如何显示和隐藏工具栏。定制状态栏,在状态栏中添加时钟显示,CTime类及其用法。在状态栏中添加进度条(主窗口产生后立即产生进度条的巧妙思想,不能在OnCreate函数中直接处理,要用到自定义消息的方法)。鼠标坐标显示,在CView中获取状态栏对象的几种方式。如何为应用程序添加启动画面。


CMainFrame 样式修改
1、在窗口创建前修改:根据多态性原理,在CMainFrame的PreCreateWindow函数中修改。
   In a single document interface (SDI) application, the default window style in the framework is a combination of the WS_OVERLAPPEDWINDOW and FWS_ADDTOTITLE styles. FWS_ADDTOTITLE is an MFC-specific style that instructs the framework to add the document title to the window’s caption. To change the window attributes in an SDI application, override the PreCreateWindow function in your class derived from CFrameWnd (which AppWizard names CMainFrame). For example:

BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
    // Create a window without min/max buttons or sizable border
    cs.style = WS_OVERLAPPED | WS_SYSMENU | WS_BORDER;

    // Size the window to 1/3 screen size and center it
    cs.cy = ::GetSystemMetrics(SM_CYSCREEN) / 3;
    cs.cx = ::GetSystemMetrics(SM_CXSCREEN) / 3;
    cs.y = ((cs.cy * 3) - cs.cy) / 2;
    cs.x = ((cs.cx * 3) - cs.cx) / 2;

    // Call the base-class version
    return CFrameWnd::PreCreateWindow(cs);
}

This code creates a main frame window without
2、在窗口创建后修改:OnCreate函数中修改,里面加上函数SetWindowLong
The SetWindowLong function changes an attribute of the specified window. The function also sets a 32-bit (long) value at the specified offset into the extra window memory of a window.

index为GWL_STYLE;样式的意思 其他有
GWL_EXSTYLE    Retrieves the extended window styles.
GWL_STYLE      Retrieves the window styles.
GWL_WNDPROC    Retrieves the address of the window procedure, or a handle representing the                address of the window procedure. You must use the CallWindowProc function to                call the window procedure.
GWL_HINSTANCE  Retrieves the handle of the application instance.
GWL_HWNDPARENT Retrieves the handle of the parent window, if any.
GWL_ID         Retrieves the identifier of the window.
GWL_USERDATA   Retrieves the 32-bit value associated with the window. Each window has a                corresponding 32-bit va

LONG SetWindowLong(
  HWND hWnd,       // handle of window
  int nIndex,      // offset of value to set
  LONG dwNewLong   // new value
);
另外一个对应的函数
The GetWindowLong function retrieves information about the specified window. The function also retrieves the 32-bit (long) value at the specified offset into the extra window memory of a window.

LONG GetWindowLong(
  HWND hWnd,  // handle of window
  int nIndex  // offset of value to retrieve
);
2、如何修改光标、图标等
MFC默认的光标、图标是由MFC底层代码完成的。当然,我们是不能修改MFC的底层代码的。
创建之前
而应该:
方法1:
在PreCreateWindow函数,定义一个自己的窗口类
 HINSTANCE AfxGetInstanceHandle( );这个函数返回当前应用程序实例的句柄。
 DefWindowProc默认的窗口函数。注意,这里用的是全局API函数,前面要有::
 菜单不是这个时候加上去的,而是在应用程序类的初始化函数加上去的,所以暂时先设置为NULL
然后注册这个窗口类
改变cs的属性类名为刚刚定义的这个类。
在框架窗口中只能修改图标等没被View覆盖的。
光标修改:应该在View类中的PreCreateWindow修改,将cs属性类名为刚刚定义的这个类。
这个方法麻烦!
方法2:
使用下面这个函数:
LPCTSTR AFXAPI AfxRegisterWndClass( UINT nClassStyle, HCURSOR hCursor = 0, HBRUSH hbrBackground = 0, HICON hIcon = 0 );
nClassStyle 为样式 参看 WndClass的style成员。msdn
在框架类的PreCreateWindow函数中 用它修改图标。
在视图类的PreCreateWindow函数中,用它修改背景、光标、画刷。
创建之后
方法1:
SetClassLong函数
The SetClassLong function replaces the specified 32-bit (long) value at the specified offset into the extra class memory or the WNDCLASSEX structure for the class to which the specified window belongs.

DWORD SetClassLong(
  HWND hWnd,       // handle of window
  int nIndex,      // index of value to change
  LONG dwNewLong   // new value
);
用法查看msdn 注意类型转换。

3、获取当前应用程序与实例句柄
AfxGetApp() 它也有个成员是实例句柄
AfxGetInstanceHandle()
4、WM_TIMER消息使用
时间间隔设置 SetTimer()在构造函数里使用。


5、创建自定义工具栏的步骤
Visual C++ provides you with two methods to create a toolbar. To create a toolbar resource using the Resource Editor, follow these steps:
(1)Create a toolbar resource.
(2)Construct the CToolBar object.
(3)Call the Create (or CreateEx) function to create the Windows toolbar and attach it to the CToolBar object.
(4)Call LoadToolBar to load the toolbar resource.
参看默认生成步骤.
6、状态栏
添加新的状态
如何访问状态拦
7、进度栏
8、自定义消息
The WM_USER constant is used by applications to help define private messages, usually of the form WM_USER+X, where X is an integer value.

#define WM_USER       0x0400

使用:#define UM_PROGRESS WM_USER+1

VS2013/MFC编程入门之一(利用MFC向导生成单文档应用程序框架)

关于VS2013和MSDN如何安装,网上有很多教程,再次就不在赘述,相信大家都已经安装好了。本次MFC编程全程使用简体中文专业版VS2013 进行操作。这一讲给大家一个简单的例子,演示如何生成单文档应...
  • zhaoyinhui0802
  • zhaoyinhui0802
  • 2016年11月22日 22:11
  • 4203

VS2013/MFC编程入门之五(对话框:创建对话框模板和修改对话框属性)

在上一讲中介绍了MFC的消息映射机制,属于原理方面的知识。对于VC++编程入门学习者来说可能有些抽象,本文会把消息映射的知识渗透到后面的教程中。本节开始为大家讲解偏应用的知识-创建对话框。   ...
  • zhaoyinhui0802
  • zhaoyinhui0802
  • 2016年11月23日 16:32
  • 4403

VS2013 更改MFC标题栏图标和生成的执行文件图标

创建一个新工程,可以什么都不加。打开.rc,  创建或打开Icon资源(以下都以Icon为例)。      单击工程窗口的资源视图标签,选中资源ID为IDR_MAINFRAME图标资源,然后按Dele...
  • langb2014
  • langb2014
  • 2016年02月08日 16:58
  • 3355

如何修改MFC AppWizard向导生成的框架程序的外观和大小part03下

  • 2010年12月29日 08:59
  • 18.02MB
  • 下载

如何修改MFC AppWizard向导生成的框架程序的外观和大小part03上

  • 2010年12月29日 08:58
  • 22.58MB
  • 下载

第九课 如何修改MFC AppWizard向导生成的框架程序的外挂和大小 3.rar

  • 2009年09月10日 23:44
  • 9.04MB
  • 下载

第九课 如何修改MFC AppWizard向导生成的框架程序的外挂和大小 1.rar

  • 2009年09月10日 23:36
  • 14.34MB
  • 下载

第九课 如何修改MFC AppWizard向导生成的框架程序的外挂和大小 2.rar

  • 2009年09月10日 23:39
  • 17.22MB
  • 下载

讲述MFC AppWizard的原理与MFC程序框架的剖析part06上

  • 2010年12月29日 09:17
  • 17.12MB
  • 下载

第三课 讲述MFC AppWizard的原理与MFC程序框架的剖析 2.rar

  • 2009年09月10日 21:28
  • 17.27MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:修改MFC AppWizard向导生成的框架程序的外观和大小
举报原因:
原因补充:

(最多只允许输入30个字)