VC单文档 窗口设置

想修改单文档框架的外观 需要在框架创建前修改 所以我们就要在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

 

 

posted @ 2012-10-04 19:33  pupil_小龙  阅读(2198)  评论(0编辑  收藏  举报