想修改单文档框架的外观 需要在框架创建前修改 所以我们就要在Frame类中找到 BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
1、修改框架窗体的大小 只要在BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)中添加如下代码
cs.cx=300; //框架窗体的宽
cs.cy=200; //高
2、修改窗体标题
注意:默认情况下框架标题是下面文档的标题
cs.style=WS_OVERLAPPEDWINDOW; //
cs.lpszName=http://www.sunxin.org;
3、去掉窗口的最大化框 这是可以在窗口创建完后操作所以我们就可以 在 int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) 函数周添加
SetWindowLong(m_hWnd,/*窗口句柄 MFC默认保存一个窗口句柄所以我们就直接引用就可以了*/
GWL_STYLE, /*设计窗口风格*/
GetWindowLong(m_hWnd,GWL_STYLE) & ~WS_MAXIMIZEBOX
/*获取当前窗口风格 然后与最大化取反相与就可以了*/
);
4、在窗口创建前修改窗口背景,图标光标 需要在Frame类中PreCreateWindow 和 view类中PreCreateWindow(窗口创建前)修改
有两种方法 建议第二种
注意:即使我们在Frame中更改了光标和背景也没有用 因为我们首先看到的是view类所以还要在view类中修改
方法一:
1、在Frame类中PreCreateWindow 中添加下面代码
WNDCLASS wndcls;
wndcls.cbClsExtra=0;
wndcls.cbWndExtra=0;
wndcls.hbrBackground=(HBRUSH)GetStockObject(BLACK_BRUSH); //窗口背景 用强制画刷设置为黑色
wndcls.hCursor=LoadCursor(NULL,IDC_HELP);//设置光标 因为是系统自己的光标 所以第一个参数为NULL
wndcls.hIcon=LoadIcon(NULL,IDI_ERROR); //设置图标 用标准图标 所以第一个参数为NULL
wndcls.hInstance=AfxGetInstanceHandle(); //获取当前应用程序的句柄
wndcls.lpfnWndProc=::DefWindowProc; //调用全局的PAI函数
wndcls.lpszClassName="sunxin.org"; //类的名字
wndcls.lpszMenuName=NULL; //菜单的名字
wndcls.style=CS_HREDRAW | CS_VREDRAW; //窗口类的类型 并不是窗口的类型
RegisterClass(&wndcls); //注册 这个类
cs.lpszClass="sunxin.org"; // 让窗口创建的时候 用我们刚刚创建的类创建
2、view类中PreCreateWindow添加如下代码
cs.lpszClass="sunxin.org"; //因为我们已经注册了这个类 所以我们直接引用
方法二:直接修改原有类的属性 这样就不用新建了
1、在Frame类中PreCreateWindow 中添加下面代码
cs.lpszClass=AfxRegisterWndClass(CS_HREDRAW | CS_VREDRAW, //累的类型窗口 水平和垂直
0, //光标 修改也没有用 所以就不修改了
0, //背景 修改也没有用 所以就不修改了
LoadIcon(NULL,IDI_WARNING)// 图标
);
2、view类中PreCreateWindow添加如下代码
cs.lpszClass=AfxRegisterWndClass(CS_HREDRAW | CS_VREDRAW, LoadCursor(NULL,IDC_CROSS), //光标
(HBRUSH)GetStockObject(BLACK_BRUSH), //背景
0 // 图标 view类没有图标 所以就不用更改了
);
5、在窗口创建后修改窗口背景,图标光标
1、在Frame的Creat中(这时窗口已经创建完成)添加如下代码
SetClassLong(m_hWnd,//句柄 GCL_HICON, //索引值 设置为图标 (LONG)LoadIcon(NULL,IDI_ERROR) //强制类型转换 );
2、在view的Creat中添加如下代码 修改背景和图标
//更改背景
SetClassLong(m_hWnd,
GCL_HBRBACKGROUND,//索引值 背景
(LONG)GetStockObject(BLACK_BRUSH) //改为黑色
);
//更改光标 SetClassLong(m_hWnd,
GCL_HCURSOR, //索引值 光标
(LONG)LoadCursor(NULL,IDC_HELP)
);
6、创建动态图标 用定时器循环载入
1、点击 insert ->resource 导入3个 ico 图标
2、在Frame类中添加 HICON 类的数值存储 3个图标 名为m_hicons
3、加载图标 在Frame的 Creat中添加下面代码
m_hIcons[0]=LoadIcon(AfxGetInstanceHandle(),//获取句柄的方法一 有下面的两种方法也行
MAKEINTRESOURCE(IDI_ICON1) //把ID好转换为字符串型的
); m_hIcons[1]=LoadIcon(theApp.m_hInstance, //用这种方法 是用其他文件里面的变量 所以要 申明一个外部变量 extern CStyleApp theApp;
MAKEINTRESOURCE(IDI_ICON2)); m_hIcons[2]=LoadIcon(AfxGetApp()->m_hInstance,MAKEINTRESOURCE(IDI_ICON3));
4、添加定时器 然后在Frame的 Creat中添加下面代码
SetTimer(1, //定时器的标示
1000, //流逝时间 1000ms
NULL
);
5、在Frame里面添加一个Timer消息 并在Timer的消息响应函数里面添加如下代码
static int index=1; //只载入一次 SetClassLong(m_hWnd, GCL_HICON, (LONG)m_hIcons[index] //或的的图标句柄 转换为LONG型 ); index=++index%3; //让数据在0-2之间变化 如果想让数据在1-10 间变化就用 %11