首页 数据库 mysql教程 MFC SDI单文档 状态栏 进度条 启动画面编程技巧 ...

MFC SDI单文档 状态栏 进度条 启动画面编程技巧 ...

Jun 07, 2016 pm 03:35 PM
mfc 启动 文档 状态 屏幕 进度

状态栏的编程离不开 CStatusBar类 CProgressCtrl 进 度条相关的控件 下面我们介绍状态栏 编程技巧 以及在状态栏添加进度条 应用程序的启动界面 状态栏的添加步骤 SDI 单文档中 下面是MFC给的 状态栏的创建步骤 Construct the CStatusBar object. 构造一个 CS

 

 

 

状态栏的编程离不开  CStatusBar类     CProgressCtrl  进 度条相关的控件      下面我们介绍状态栏 编程技巧  以及在状态栏添加进度条   应用程序的启动界面


   状态栏的添加步骤     SDI 单文档中      下面是MFC给的 状态栏的创建步骤
 
   Construct the CStatusBar object.
   构造一个 CStatusBar对象

   Call the Create (or CreateEx) function to create the status-bar window and attach it to the CStatusBar object.
   调用CreateEx函数创建一个状态栏 

   Call SetIndicators to associate a string ID with each indicator
   
   调用SetIndicators 为每个指示器附加一个 字符串资源ID    static  UINT indicators[]={
                                                                                  ........                                            
 

                                                                                       };

     1.       下面是在框架类的处理 添加我们自己的状态栏指示器   我们可以定义自己的指示器数组 
               
             static UINT indicator[] =
          {
 ID_SEPARATOR,           // status line indicator  最长的那个格索引为 0
 ID_INDICATOR_CAPS,    //每个代表一个字符串资源
 ID_INDICATOR_NUM,
 ID_INDICATOR_SCRL,    
         ......             //这里增加字符串资源 会反映到状态栏
        };
 

     OnCreate(LPCREATESTRUCTION lp)函数中  有如下代码
            
               if (!m_wndStatusBar.Create(this) ||                 //创建
  !m_wndStatusBar.SetIndicators(indicator,           //设置指示器的个数
    sizeof(indicator)/sizeof(UINT)))
 {
  TRACE0("Failed to create status bar\n");
  return -1;      // fail to create
 }

 
 
  2.给状态栏 指定ID号的指示器 增加时间  这时候用到 CTime类 获得系统时间    下面是代码 CStatusBar  m_statusBar;   在相应WM_PAINT消息相应函数 OnPaint

       SetTimer(1000,1000,NULL);  

 

    捕获WM_TIMER消息    在OnTimer函数中 添加如下代码
                      

                   
                                   CTime  time=CTime::GetCurrentTime();// 经过静态方法返回一个CTime对象
                                   CString str=time.Format("%H:%M:%S"); //格式化时间 到str 
       CClientDC dc(this);  //创建一个 框架类的dc
       CSize size=dc.GetTextExtent(str);  //获得字符串中在屏幕上显示的尺寸
       int index =m_wndStatusBar.CommandToIndex(IDS_TIMER);  //通过ID获取索引
       m_wndStatusBar.SetPaneInfo(index,IDS_TIMER,SBPS_NORMAL,size.cx);  //设置指示器的宽度  
                                   m_wndStatusBar.SetPaneText(index,str); //设置指定索引指示器的文本

 

                      
 
 3.在状态栏的 IDS_PROGRESS上添加一个 进度条     CProgressCtrl  类       在框架类增加变量  CProgressCtrl  m_progress;  

 在OnPaint函数  添加代码响应  WM_PAINT消息 

    
        CRect rect;    //创建CRect对象
  m_wndStatusBar.GetItemRect(m_wndStatusBar.CommandToIndex(IDS_PROGRESS),&rect); //获得一个指定索引的指示器的矩形区域
 
  if(!m_progress.m_hWnd)   //判断句柄是否为空
  {
 m_progress.Create(PBS_SMOOTH|WS_CHILD|WS_VISIBLE,rect,&m_wndStatusBar,123);     //如果句柄为空那么创建进度条
  }
  else
  {
   m_progress.MoveWindow(&rect);  //否则移动到当前区域

  }
 m_progress.SetPos(50);  //设置进度条初始位置  50 


 在 OnTimer函数中加上    m_stausBar.StepIt();//进度条按指定步长 一秒 前进一次

 

4.在最长的指示器上显示 视图的X  Y坐标    我们需要相应视图的  WM_MOUSEMOVE事件  并且调用 框架类的函数执行  

#include "MainFrm.h"
void CMyView::OnMouseMove(UINT nFlags, CPoint point)
{

   CString str="";
   str.Format("x=%d,y=%d",point.x,point.y);
     //   (((CMainFrame*)GetParent())->m_wndStatusBar).SetWindowText(str);   //直接通过状态栏指针设置索引为0指示器
    //      (((CMainFrame*)GetParent())->m_wndStatusBar).SetPaneText(0,str);  //设置按钮文本 索引为0

    //    ((CMainFrame*)GetParent())->SetMessageText(str);//框架类的函数 直接设置 索引为0的状态栏指示器文本
 
    // ((CMainFrame*)GetParent())->GetMessageBar()->SetWindowText(str);  //通过框架类函数获得 状态栏指针 然后调用SetWindowText设置文本
  

  GetParent()->GetDescendantWindow(AFX_IDW_STATUS_BAR)->SetWindowText(str);    //CWnd类的函数获得一个子孙窗体的指针 我们可以传递状态栏ID获得
 CView::OnMouseMove(nFlags, point);
}

 

5.增加启动画面   我们可以利用向导增加之后 我们自行设置 启动画面的 style

project->add to project  ->comments  controls    添加->  vc++  components  -> splash screen   就完成了启动画面的添加  

对于启动时间  画面 我们可以自行在生成的类中设置
            

                          

 

 


            

 

 

 

 

 


 

 

 

 

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
2 周前 By 尊渡假赌尊渡假赌尊渡假赌
仓库:如何复兴队友
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

内存或磁盘空间不足,无法重新分页或打印此文档Word错误 内存或磁盘空间不足,无法重新分页或打印此文档Word错误 Feb 19, 2024 pm 07:15 PM

本文将介绍如何解决在MicrosoftWord中出现的内存或磁盘空间不足以重新分页或打印文档的问题。这种错误通常会在用户尝试打印Word文档时出现。如果您遇到类似的错误,请参考本文提供的建议进行解决。内存或磁盘空间不足,无法重新分页或打印此文档Word错误解决MicrosoftWord打印错误“没有足够内存或磁盘空间重新分页或打印文档”的方法。更新MicrosoftOffice关闭占用内存的应用程序更改您的默认打印机在安全模式下启动Word重命名NorMal.dotm文件将Word文件保存为另一

如何解决应用程序启动错误0xc000012d问题 如何解决应用程序启动错误0xc000012d问题 Jan 02, 2024 pm 12:53 PM

当小伙伴的电脑缺失一定的文件之后就会出现应用程序无法正常启动0xc000012d的情况,其实只要重新下载文件并安装就可以很好的解决了哟。应用程序无法正常启动0xc000012d:1、首先用户需要下载“.netframework”。2、然后找到下载地址并将其下载到自己的计算机上。3、然后在桌面双击开始运行。4、安装完成之后返回之前错误的程序位置,再次打开程序即可。

处于待机状态的连接状态:已断开,原因:NIC合规性 处于待机状态的连接状态:已断开,原因:NIC合规性 Feb 19, 2024 pm 03:15 PM

“事件日志消息中的连接状态显示为待机状态:已断开连接,原因是符合NIC标准。这意味着系统在待机模式下,网络接口卡(NIC)已断开连接。虽然这通常是网络问题,但也可能由软件和硬件冲突引起。在接下来的讨论中,我们将探讨如何解决这一问题。”待机连接断开的原因是什么?NIC合规性?如果在Windows事件查看器中发现“ConnectivityStatusinStandby:DisConnected,Reason:NICCompliance”消息,这表示您的NIC或网络接口控制器可能存在问题。这种情况通常

Ubuntu启动黑屏问题的有效解决方案与技巧 Ubuntu启动黑屏问题的有效解决方案与技巧 Dec 29, 2023 am 10:30 AM

解决Ubuntu启动黑屏的实用技巧与方法引言:Ubuntu是一款广受欢迎的Linux操作系统,但有时候在启动过程中可能会遇到黑屏问题。这种问题可能由于多种原因引起,如显卡驱动问题、软件冲突或系统错误等。本文将介绍一些实用的技巧和方法,帮助解决Ubuntu启动黑屏问题,以保证系统的稳定运行。一、更新并重新安装显卡驱动进入恢复模式:在启动时按下Shift键,进入

解决电脑提示'reboot and select proper boot device'的方法 解决电脑提示'reboot and select proper boot device'的方法 Jan 15, 2024 pm 02:00 PM

重装系统也未必是个万全之策,可是重装后发现电脑开机会显示黑底白字,然后给出提示:rebootandselectproperbootdevice,这是怎么回事?出现这样的提示一般是引导出错所致。为了帮助到了大家,为此,小编就给大家带来了解决的方法了。电脑使用是越来越普及了而遇到电脑的故障也越来越来多,这不,最近有用户在电脑开机时遇到显示黑屏,并提示RebootandSelectproperBootdevice,无法正常启动电脑系统。这是怎么回事呢?又该怎么去解决呢?让用户一头雾水,下面,小编就来跟

如何对Word文档加红线 如何对Word文档加红线 Mar 01, 2024 am 09:40 AM

它是395个字,就是495个这篇文章将向您介绍如何在Word文档中添加红线。在文档中添加红线是指对文档进行修改,以便用户可以清楚地查看所做的更改。这项功能在多人共同编辑一个文档时非常重要。redline是什么意思标记文档加红线是指使用红线或标注来指示对文档的更改、编辑或修订。这个术语的灵感来源于使用红色笔在打印文档上做标记的做法。红线批注被广泛应用在不同场景下,如:在编辑文档时为作者、编辑和审阅人清楚地显示建议的更改。在法律协议或合同中提出变更和修改对论文、演讲等提出建设性的批评和建议。如何给W

wps不能启动此对象的源应用程序怎么办? wps不能启动此对象的源应用程序怎么办? Mar 13, 2024 pm 09:13 PM

  wps是使用非常广泛的办公软件,包括了文档、表格和PPT,且支持多端同步。如果在编辑wps时出现提示“不能启动此对象的源应用程序”,要如何解决?出现这个问题可能是因为你正在尝试打开一个链接或文件,但是它的源应用程序已经不存在或者被删除了。  以下是一些修复方法:  1、重新安装WPS软件:尝试重装WPSOffice来修复该问题,确保您使用的是最新版本。  2、手动更改默认程序:试着将默认程序更改为WPS,可以按右键单击需要打开的文件,选择“打开方式”,然

无法打开word文档中的超链接 无法打开word文档中的超链接 Feb 18, 2024 pm 06:10 PM

近年来,随着网络技术的不断发展,我们的生活中离不开各种数字工具和互联网。在处理文档时,特别是在写作中,我们经常会使用到word文档。然而,有时我们可能会遇到一个棘手的问题,那就是word文档中的超链接无法打开。下面将就这个问题进行一番探讨。首先,我们需要明确的是,超链接是指在word文档中添加的指向其他文档、网页、目录、书签等的链接。当我们点击这些链接时,我

See all articles