那些漂亮的程序界面特效是VC做的?比如进度条之类的。
答案:2 悬赏:30 手机版
解决时间 2021-02-08 10:50
- 提问者网友:听门外雪花风
- 2021-02-07 19:48
那些漂亮的程序界面特效是VC做的?比如进度条之类的。
最佳答案
- 五星知识达人网友:持酒劝斜阳
- 2021-02-07 19:58
1、 启动Visual C++6.0,生成一个单文档应用程序prgsbar,项目的视图类的基类选择CEdit类;
2、 在程序的Resource.h文件中添加自定义消息的定义:
#define MYWM_PROGRESS (WM_USER+1)
3、 在程序的主框架窗口CMainFrame类的头文件中声明MYWM_PROGRESS的消息响应函数afx_msg LRESULT OnProgress(WPARAM wp, LPARAM lp),在该类的实现中添加消息映射ON_MESSAGE(MYWM_PROGRESS,OnProgress);
4、 将CMainFrame类中的工具条对象改为CProgStatusBar m_wndStatusBar;
5、 重载CPrgsbarDoc::Serialize(CArchive& ar)函数,用来处理读取文件时的进度条仿真;
6、 添加代码,编译运行程序。
程序代码
////////////////////////////////////////////CprogStatusBar类的头文件;
// Status bar with progress control.
class CProgStatusBar : public CStatusBar {
public:
CProgStatusBar();
virtual ~CProgStatusBar();
CProgressCtrl& GetProgressCtrl() {
return m_wndProgBar;
}
void OnProgress(UINT pct);
protected:
CProgressCtrl m_wndProgBar; // the progress bar
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
afx_msg void OnSize(UINT nType, int cx, int cy);
DECLARE_MESSAGE_MAP()
DECLARE_DYNAMIC(CProgStatusBar)
};
///////////////////////////////////////////////////////////////////////////// CprogStatusBar类的实现文件;
#include "StdAfx.h"
#include "ProgBar.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
IMPLEMENT_DYNAMIC(CProgStatusBar, CStatusBar)
BEGIN_MESSAGE_MAP(CProgStatusBar, CStatusBar)
ON_WM_CREATE()
ON_WM_SIZE()
END_MESSAGE_MAP()
////////////////////////////////////////////////////////////////
CProgStatusBar::CProgStatusBar()
{}
CProgStatusBar::~CProgStatusBar()
{}
////////////////////////////////////////创建状态条时也创建进程条
int CProgStatusBar::OnCreate(LPCREATESTRUCT lpcs)
{
lpcs->style |= WS_CLIPCHILDREN;
VERIFY(CStatusBar::OnCreate(lpcs)==0);
VERIFY(m_wndProgBar.Create(WS_CHILD, CRect(), this, 1));
m_wndProgBar.SetRange(0,100); //设置进程条的范围;
return 0;
}
////////////////////////////////////////////////////使进程度条的尺寸与状态条的尺寸同步变化;
void CProgStatusBar::OnSize(UINT nType, int cx, int cy)
{
CStatusBar::OnSize(nType, cx, cy);
CRect rc;
GetItemRect(0, &rc);
m_wndProgBar.MoveWindow(&rc,FALSE);
}
////////////////////////////////////////////////////////////根据pct的当前值对进程条进行设置
void CProgStatusBar::OnProgress(UINT pct)
{
CProgressCtrl& pc = m_wndProgBar;
DWORD dwOldStyle = pc.GetStyle();
DWORD dwNewStyle = dwOldStyle;
if (pct>0) //如果pct>0,将显示进度条
dwNewStyle |= WS_VISIBLE;
else //否则隐藏进度条;
dwNewStyle &= ~WS_VISIBLE;
if (dwNewStyle != dwOldStyle) {
SetWindowText(NULL); //显示进度条前清空状态条;
SetWindowLong(pc.m_hWnd, GWL_STYLE, dwNewStyle);
//设置进度条处于显示状态;
}
// 设置进度条的当前位置;
pc.SetPos(pct);
if (pct==0)
// 如果pct等于0,通知主框架窗口显示空闲信息;
GetParent()->PostMessage(WM_SETMESSAGESTRING, AFX_IDS_IDLEMESSAGE);
}
/////////////////////////////////////////////////////////////////////////文档装载处理函数;
void CPrgsbarDoc::Serialize(CArchive& ar)
{
CWnd* pFrame = AfxGetMainWnd();
if (!ar.IsStoring()) {
for (int pct=10; pct<=100; pct+=10) {//对文档装载进行仿真处理;
Sleep(150);
if (pFrame)
pFrame->SendMessage(MYWM_PROGRESS, pct);
}
}
if (pFrame)
pFrame->SendMessage(MYWM_PROGRESS, 0);
((CEditView*)m_viewList.GetHead())->SerializeRaw(ar);//显示文本文件的内容;
}
2、 在程序的Resource.h文件中添加自定义消息的定义:
#define MYWM_PROGRESS (WM_USER+1)
3、 在程序的主框架窗口CMainFrame类的头文件中声明MYWM_PROGRESS的消息响应函数afx_msg LRESULT OnProgress(WPARAM wp, LPARAM lp),在该类的实现中添加消息映射ON_MESSAGE(MYWM_PROGRESS,OnProgress);
4、 将CMainFrame类中的工具条对象改为CProgStatusBar m_wndStatusBar;
5、 重载CPrgsbarDoc::Serialize(CArchive& ar)函数,用来处理读取文件时的进度条仿真;
6、 添加代码,编译运行程序。
程序代码
////////////////////////////////////////////CprogStatusBar类的头文件;
// Status bar with progress control.
class CProgStatusBar : public CStatusBar {
public:
CProgStatusBar();
virtual ~CProgStatusBar();
CProgressCtrl& GetProgressCtrl() {
return m_wndProgBar;
}
void OnProgress(UINT pct);
protected:
CProgressCtrl m_wndProgBar; // the progress bar
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
afx_msg void OnSize(UINT nType, int cx, int cy);
DECLARE_MESSAGE_MAP()
DECLARE_DYNAMIC(CProgStatusBar)
};
///////////////////////////////////////////////////////////////////////////// CprogStatusBar类的实现文件;
#include "StdAfx.h"
#include "ProgBar.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
IMPLEMENT_DYNAMIC(CProgStatusBar, CStatusBar)
BEGIN_MESSAGE_MAP(CProgStatusBar, CStatusBar)
ON_WM_CREATE()
ON_WM_SIZE()
END_MESSAGE_MAP()
////////////////////////////////////////////////////////////////
CProgStatusBar::CProgStatusBar()
{}
CProgStatusBar::~CProgStatusBar()
{}
////////////////////////////////////////创建状态条时也创建进程条
int CProgStatusBar::OnCreate(LPCREATESTRUCT lpcs)
{
lpcs->style |= WS_CLIPCHILDREN;
VERIFY(CStatusBar::OnCreate(lpcs)==0);
VERIFY(m_wndProgBar.Create(WS_CHILD, CRect(), this, 1));
m_wndProgBar.SetRange(0,100); //设置进程条的范围;
return 0;
}
////////////////////////////////////////////////////使进程度条的尺寸与状态条的尺寸同步变化;
void CProgStatusBar::OnSize(UINT nType, int cx, int cy)
{
CStatusBar::OnSize(nType, cx, cy);
CRect rc;
GetItemRect(0, &rc);
m_wndProgBar.MoveWindow(&rc,FALSE);
}
////////////////////////////////////////////////////////////根据pct的当前值对进程条进行设置
void CProgStatusBar::OnProgress(UINT pct)
{
CProgressCtrl& pc = m_wndProgBar;
DWORD dwOldStyle = pc.GetStyle();
DWORD dwNewStyle = dwOldStyle;
if (pct>0) //如果pct>0,将显示进度条
dwNewStyle |= WS_VISIBLE;
else //否则隐藏进度条;
dwNewStyle &= ~WS_VISIBLE;
if (dwNewStyle != dwOldStyle) {
SetWindowText(NULL); //显示进度条前清空状态条;
SetWindowLong(pc.m_hWnd, GWL_STYLE, dwNewStyle);
//设置进度条处于显示状态;
}
// 设置进度条的当前位置;
pc.SetPos(pct);
if (pct==0)
// 如果pct等于0,通知主框架窗口显示空闲信息;
GetParent()->PostMessage(WM_SETMESSAGESTRING, AFX_IDS_IDLEMESSAGE);
}
/////////////////////////////////////////////////////////////////////////文档装载处理函数;
void CPrgsbarDoc::Serialize(CArchive& ar)
{
CWnd* pFrame = AfxGetMainWnd();
if (!ar.IsStoring()) {
for (int pct=10; pct<=100; pct+=10) {//对文档装载进行仿真处理;
Sleep(150);
if (pFrame)
pFrame->SendMessage(MYWM_PROGRESS, pct);
}
}
if (pFrame)
pFrame->SendMessage(MYWM_PROGRESS, 0);
((CEditView*)m_viewList.GetHead())->SerializeRaw(ar);//显示文本文件的内容;
}
全部回答
- 1楼网友:十年萤火照君眠
- 2021-02-07 21:30
你好!
那些都是随主题变化的,这些都是主题模式里面的一个程式,换换主题,界面就会不一样了
如有疑问,请追问。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯