您的位置:首页 > 其它

创建进度栏的步骤

2011-11-29 21:26 169 查看
注意:其实只需要1、8两步就可以完成操作,其他的步骤没有起作用,写出来只是让大家明白创建的具体思路;

1、在CMainFrame的头文件中新建一个CProgressCtrl 的对象m_progress;

2、在CMainFrame的头文件中定义一个消息:

#define UM_PROGRESS WM_USER+1

3、在注释宏下声明消息响应函数原型:

afx_msg void OnProgress();

4、消息映射:

ON_MESSAGE(UM_PROGRESS,OnProgress)

5、消息响应函数的实现部分:

void CMainFrame::OnProgress()

{

CRect rect;//创建一个矩形区域

m_wndStatusBar.GetItemRect(2,&rect);//获取状态栏所设定状态栏所占的矩形区域

m_progress.Create(WS_CHILD|WS_VISIBLE|PBS_VERTICAL,rect,&m_wndStatusBar,123);//创建状态栏

m_progress.SetPos(50);//设定状态栏当前位置为50%

}

6、在oncreate中添加:

PostMessage(UM_PROGRESS);

7、当窗口尺寸变化的时候,进度栏的位置就回变化,所以只用以上的步骤还是没有完成进度栏的创建:

8、在CMainFrame中增加消息处理,WM_PAINT增加处理器并编辑,代码如下:

void CMainFrame::OnPaint()

{

CPaintDC dc(this); // device context for painting

// TODO: Add your message handler code here

CRect rect;

m_wndStatusBar.GetItemRect(2,&rect);

if(!m_progress.m_hWnd)

m_progress.Create(WS_CHILD | WS_VISIBLE,rect,&m_wndStatusBar,123);

else

m_progress.MoveWindow(rect); //将进度栏移动到矩形区域中

m_progress.SetPos(50);

// Do not call CFrameWnd::OnPaint() for painting messages

}

注意:其实只需要1、8两步就可以完成操作,其他的步骤没有起作用,写出来只是让大家明白创建的具体思路;

8、让进度栏“动起来”

在OnTimer中添加代码:

m_wndStatusBar.SetPaneInfo(1,IDS_TIMER,SBPS_NORMAL,sz.cx);

m_wndStatusBar.SetPaneText(m_wndStatusBar.CommandToIndex(IDS_TIMER),str);//在状态栏面板上显示时间

m_progress.StepIt();

运行即可;

9、完成一个功能,当移动鼠标时,在第一个状态栏中显示鼠标的坐标值:

在view类中天剑WM_MOUSEMOVE,在OnMouseMove中添加代码如下:

void CStytleView::OnMouseMove(UINT nFlags, CPoint point)

{

// TODO: Add your message handler code here and/or call default

CString str;

str.Format("x = %d,y = %d",point.x,point.y);//格式化鼠标的坐标

//((CMainFrame*)GetParent())->m_wndStatusBar.SetWindowText(str);//在最长的状态栏中显示str,方法一

//((CMainFrame*)GetParent())->SetMessageText(str); 方法二

//((CMainFrame*)GetParent())->GetMessageBar()->SetWindowText(str); 方法三

GetParent()->GetDescendantWindow(AFX_IDW_STATUS_BAR)->SetWindowText(str); //方法四

CView::OnMouseMove(nFlags, point);

}

10、添加启动画面

在工程-添加到工程-组建和控件-Visual C++ Components-splash screen-insert -确定-(可以修改类型或ID)-ok-编译-运行

在系统自动添加的类CSplashWnd中更改oncreate函数中的SetTimer(1, 3000, NULL)既可以改变启动画面显示的时间;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: