正文

第9课2007-05-01 15:37:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/bclz/25436.html

分享到:

1.修改外观和图标可以在MainFrm中进行,而修改背景和光标只能在View中进行。为什么?因为view的显示挡 在了MainFrame的前面。  a.在MainFrame中      PreCreateWindow()中,在窗口创建之前,用重新注册窗口类的方法,比较麻烦。在PreCreateWindow ()中修改      也可以用简单的方法,用全局函数//cs.lpszClass=AfxRegisterWndClass(CS_HREDRAW | CS_VREDRAW,0,0,// LoadIcon(NULL,IDI_WARNING));     在窗口创建之后,在OnCreate()中修改//SetWindowLong(m_hWnd,GWL_STYLE,WS_OVERLAPPEDWINDOW);//SetWindowLong(m_hWnd,GWL_STYLE,GetWindowLong(m_hWnd,GWL_STYLE) & ~WS_MAXIMIZEBOX);// SetClassLong(m_hWnd,GCL_HICON,(LONG)LoadIcon(NULL,IDI_ERROR));  b.在View中    PreCreateWindow()中//cs.lpszClass=AfxRegisterWndClass(CS_HREDRAW | CS_VREDRAW,// LoadCursor(NULL,IDC_CROSS),(HBRUSH)GetStockObject(BLACK_BRUSH),NULL);cs.lpszClass=AfxRegisterWndClass(CS_HREDRAW | CS_VREDRAW);    OnCreate()中SetClassLong(m_hWnd,GCL_HBRBACKGROUND,(LONG)GetStockObject(BLACK_BRUSH));SetClassLong(m_hWnd,GCL_HCURSOR,(LONG)LoadCursor(NULL,IDC_HELP));2.创建一个不断变化的图标。用定时器和SetClassLong完成  a.准备三个图标文件,放在RES文件夹,Insert->Resource-三个图标,  b.在CMainFrame中增加图标句柄数组,m_hIcons[3]m_hIcons[0]=LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE (IDI_ICON1));//MAKEINTRESOURCE是一个宏,它将整数转化为Win32的资源类型,简单的说它是一个类型转换 #define MAKEINTRESOURCEA(i) (LPSTR)((DWORD)((WORD)(i)))m_hIcons[1]=LoadIcon(theApp.m_hInstance,MAKEINTRESOURCE(IDI_ICON2));//此处需要用到 theAPP对象,故要在文件中声明extern CStyleApp theApp;m_hIcons[2]=LoadIcon(AfxGetApp()->m_hInstance,MAKEINTRESOURCE(IDI_ICON3));然后将其初始化  c.然后在定时器中实现3.工具栏的编程  a.加入分隔符的方法,向右拖动即可;  b.删除按纽的方法,拖出即可。4.创建一个新的工具栏的方法  a.插入一个工具栏,画出其图形。  b.在头文件中,定义CToolBar m_newToolBar  c.在MainFrm.cpp的OnCreate()中调用if (!m_newToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_RIGHT  | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||  !m_newToolBar.LoadToolBar(IDR_TOOLBAR1)){  TRACE0("Failed to create toolbar\n");  return -1;      // fail to create}     d.点击“新的工具栏”菜单时,隐藏工具栏。两种方法  第一种/*if(m_newToolBar.IsWindowVisible()){  m_newToolBar.ShowWindow(SW_HIDE);}else{  m_newToolBar.ShowWindow(SW_SHOW);}RecalcLayout();DockControlBar(&m_newToolBar);*/  第二种ShowControlBar(&m_newToolBar,!m_newToolBar.IsWindowVisible(),FALSE);  e.将菜单增加复选标记。在OnUpdateUI中加入代码    pCmdUI->SetCheck(m_newToolBar.IsWindowVisible());5.状态栏编程  a.Indicator[]数组中有状态栏的信息  如果要增加,可以在String Table中加入一个IDS_Timer,然后将其加入到[]中。  b.在时间栏显示时间,代码略,比较简单6.进度栏  a.增加成员变量,CProgressCtrl m_progress  b.OnCreate中 m_progress.Create(WS_CHILD | WS_VISIBLE,// | PBS_VERTICAL,  rect,&m_wndStatusBar,123);m_progress.SetPos(50);*/   c.将其创建到状态栏的方法!如果在OnCreate()中创建,则不成立,因为获取矩形大小时失败。    解决办法,用自定义消息:    在MainFrm.h中#define UM_PROGRESS  WM_USER+1afx_msg void OnProgress();    在MainFrm.cpp中ON_MESSAGE(UM_PROGRESS,OnProgress)然后实现这个函数void CMainFrame::OnProgress(){CRect rect;m_wndStatusBar.GetItemRect(2,&rect);m_progress.Create(WS_CHILD | WS_VISIBLE | PBS_SMOOTH,  rect,&m_wndStatusBar,123);m_progress.SetPos(50);}     最后在OnCreate中调用 PostMessage(UM_PROGRESS);//不能用SendMessage()   d.解决重绘时进度栏改变的问题。在OnPain()中重写代码CRect rect;m_wndStatusBar.GetItemRect(2,&rect);m_progress.Create(WS_CHILD | WS_VISIBLE | PBS_SMOOTH,  rect,&m_wndStatusBar,123);m_progress.SetPos(50);然后在定时器消息处理函数中加入m_progress.StepIt();   e.显示鼠标位置。在View中增加OnMouseMove()处理函数CString str;str.Format("x=%d,y=%d",point.x,point.y);//((CMainFrame*)GetParent())->m_wndStatusBar.SetWindowText(str);//((CMainFrame*)GetParent())->SetMessageText(str);//((CMainFrame*)GetParent())->GetMessageBar()->SetWindowText(str);GetParent()->GetDescendantWindow(AFX_IDW_STATUS_BAR)->SetWindowText(str);7.加入启动画面  Project-Component and ->Visual C++ Components->SplashScreen->插入

阅读(2560) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册