主頁 > 軟體工程 > VC 6.0,如何獲取資源視圖內的屬性頁的大小資訊

VC 6.0,如何獲取資源視圖內的屬性頁的大小資訊

2020-09-19 06:51:35 軟體工程

導師丟過來的歷史遺留問題。。是C寫的WIN應用程式,在使用屬性頁時因為解析度問題會導致不同PC上容器PropSheet大小不同,部分屬性頁的內容顯示不出來,所以希望能get到IDD_PROPPAGE_LARGE這個資源檔案的大小來調整容器的大小,以前也沒寫過C的win程式,也沒用過C++,麻煩各位解答一下

uj5u.com熱心網友回復:

刷個分,,,,,,,,

uj5u.com熱心網友回復:

在虛擬機中的winxp下使用。

uj5u.com熱心網友回復:

參考 2 樓 zhao4zhong1 的回復:
在虛擬機中的winxp下使用。


用戶那邊的環境不確定。。所以想強行自己設定視窗的解析度

uj5u.com熱心網友回復:

參考 3 樓 kingmax_yang 的回復:
Quote: 參考 2 樓 zhao4zhong1 的回復:

在虛擬機中的winxp下使用。


用戶那邊的環境不確定。。所以想強行自己設定視窗的解析度

維護老系統程式在新系統下正常作業的通行做法是在新系統下對應老系統的虛擬機下使用老系統。
↑怎么感覺象繞口令。

uj5u.com熱心網友回復:

PropertySheet 是微軟的bug,在win8 win10 可能有顯示不完全的bug,應該是系統默認字體的影響
使用以下代碼解決

/*****************************************************************************************
 File:     CBPropertySheet.h
 Author:   Ovidiu Cucu - Microsoft MVP Viusal C++ 
                         Codeguru nickname: ovidiucucu
                         Homepage: www.codexpert.ro
 Updated:  January 02, 2010
 Contents: CCBPropertySheet class definition.
 Remarks:  CCBPropertySheet is an MFC-extension class for creating properties sheets
           which are using a custom font.
******************************************************************************************/
#pragma once

#if _MSC_VER < 1300 // VS6.0 and older
#define DOMODAL_RET int
#else
#define DOMODAL_RET INT_PTR 
#endif 

class CCBPropertySheet : public CBCGPPropertySheetCtrl
{
DECLARE_DYNAMIC(CCBPropertySheet)
public:
CCBPropertySheet(UINT nIDCaption, CWnd* pParentWnd = NULL, UINT iSelectPage = 0);
CCBPropertySheet(LPCTSTR pszCaption, CWnd* pParentWnd = NULL, UINT iSelectPage = 0);
CCBPropertySheet();
virtual ~CCBPropertySheet();

// Attributes
private:
   static __declspec(thread) WORD m_wFontSize;
   static __declspec(thread) LPCTSTR m_pszFontFaceName;

// Operations
public:
   // call this function to create a modal property sheet with custom font.
   DOMODAL_RET DoModal(LPCTSTR pszFontFaceName, WORD wFontSize);

   // call this function to create a modal property sheet with default font.
   virtual DOMODAL_RET DoModal();

   // call this function to create a modeless property sheet with custom font.
BOOL Create(LPCTSTR pszFontFaceName, WORD wFontSize, CWnd* pParentWnd = NULL, 
               DWORD dwStyle = (DWORD)-1, DWORD dwExStyle = 0);

   // call this function to create a modeless property sheet with default font.
BOOL Create(CWnd* pParentWnd = NULL, DWORD dwStyle = (DWORD)-1, DWORD dwExStyle = 0);

// Overides
protected:
   virtual void BuildPropPageArray();

// Implementation
private:
   static int CALLBACK PropSheetProc(HWND hWndDlg, UINT uMsg, LPARAM lParam);
   void Init(LPCTSTR pszFontFaceName, WORD wFontSize);
};

uj5u.com熱心網友回復:

/*****************************************************************************************
 File:     CBPropertySheet.cpp
 Author:   Ovidiu Cucu - Microsoft MVP Viusal C++ 
                         Codeguru nickname: ovidiucucu
                         Homepage: www.codexpert.ro
 Updated:  January 02, 2010
 Contents: CCBPropertySheet class implementation.
 Remarks:  CCBPropertySheet is an MFC-extension class for creating properties sheets
           which are using a custom font.
******************************************************************************************/
#include "stdafx.h"

#include "CBPropertySheet.h"
#include <AFXPRIV.H>

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

WORD __declspec(thread) CCBPropertySheet::m_wFontSize = 0;
LPCTSTR __declspec(thread) CCBPropertySheet::m_pszFontFaceName = NULL;

IMPLEMENT_DYNAMIC(CCBPropertySheet, CBCGPPropertySheetCtrl)

/*****************************************************************************************
 Function:   CCBPropertySheet::CCBPropertySheet
 Purpose:    Constructs a CCBPropertySheet object.
 Parameters: - nIDCaption: Resource ID of the caption to be used for the property sheet.
             - pParentWnd: Parent window (default NULL).
             - iSelectPage: Index of the page that will initially be on top (default 0).
******************************************************************************************/
CCBPropertySheet::CCBPropertySheet(UINT nIDCaption, CWnd* pParentWnd, UINT iSelectPage)
:CBCGPPropertySheetCtrl(nIDCaption, pParentWnd, iSelectPage)
{
}

/*****************************************************************************************
 Function:   CCBPropertySheet::CCBPropertySheet
 Purpose:    Constructs a CCBPropertySheet object.
 Parameters: - pszCaption: The string to be displayed on the property sheet caption. 
             - pParentWnd: Parent window (default NULL).
             - iSelectPage: Index of the page that will initially be on top (default 0).
******************************************************************************************/
CCBPropertySheet::CCBPropertySheet(LPCTSTR pszCaption, CWnd* pParentWnd, UINT iSelectPage)
:CBCGPPropertySheetCtrl(pszCaption, pParentWnd, iSelectPage)
{
}

CCBPropertySheet::CCBPropertySheet()
:CBCGPPropertySheetCtrl()
{

}
/*****************************************************************************************
 Function:   CCBPropertySheet::~CCBPropertySheet
 Purpose:    Destructs a CCBPropertySheet object.
******************************************************************************************/
CCBPropertySheet::~CCBPropertySheet()
{
}

/*****************************************************************************************
 Function:   CCBPropertySheet::PropSheetProc
 Purpose:    Application-defined callback function that the system calls when the property 
             sheet is being created and initialized
 Parameters: - hWndDlg: Handle to the property sheet dialog box.
             - uMsg: Message being received
             - lParam: Additional information about the message.
 Remarks:    If uMsg is PSCB_PRECREATE, lParam is the address of a dialog template in 
             memory. This template is in the form of a DLGTEMPLATE or DLGTEMPLATEEX 
             structure followed by one or more DLGITEMTEMPLATE structures.
******************************************************************************************/
int CALLBACK CCBPropertySheet::PropSheetProc(HWND hWndDlg, UINT uMsg, LPARAM lParam)
{
   switch(uMsg)
   {
   case PSCB_PRECREATE:
      {
         if((m_wFontSize > 0) && (NULL != m_pszFontFaceName))
         {
            
            LPDLGTEMPLATE pResource = (LPDLGTEMPLATE)lParam;
            CDialogTemplate dlgTemplate(pResource);
            dlgTemplate.SetFont(m_pszFontFaceName, m_wFontSize);
            memmove((void*)lParam, dlgTemplate.m_hTemplate, dlgTemplate.m_dwTemplateSize);
         }
      }
      break;
   }
   return 0;
}

/*****************************************************************************************
 Function:   CCBPropertySheet::Create
 Purpose:    Creates a modeless property sheet.
 Parameters: - pszFontFaceName: Font face name.
             - wFontSize: Font size.
             - pParentWnd: parent window (default NULL).
             - dwStyle: style (default -1).
             - dwExStyle: extended style (default 0).
 Remarks:    Call this function for creating modeless property sheets with CUSTOM FONT.
******************************************************************************************/
BOOL CCBPropertySheet::Create(LPCTSTR pszFontFaceName, WORD wFontSize, CWnd* pParentWnd, 
                              DWORD dwStyle, DWORD dwExStyle)
{
   Init(pszFontFaceName, wFontSize);
   return CBCGPPropertySheetCtrl::Create(pParentWnd, dwStyle, dwExStyle);
}

/*****************************************************************************************
 Function:   CCBPropertySheet::Create
 Purpose:    Creates a modeless property sheet.
 Parameters: - pParentWnd: parent window (default NULL).
             - dwStyle: style (default -1).
             - dwExStyle: extended style (default 0).
 Remarks:    Call this function for creating modeless property sheets with DEFAULT FONT.
******************************************************************************************/
BOOL CCBPropertySheet::Create(CWnd* pParentWnd, DWORD dwStyle, DWORD dwExStyle)
{
   Init(NULL, 0);
   return CBCGPPropertySheetCtrl::Create(pParentWnd, dwStyle, dwExStyle);
}

/*****************************************************************************************
 Function:   CCBPropertySheet::DoModal
 Purpose:    Creates a modal property sheet.
 Parameters: - pszFontFaceName: Font face name.
             - wFontSize: Font size.
 Remarks:    Call this function for creating modal property sheets with CUSTOM FONT.
******************************************************************************************/
DOMODAL_RET CCBPropertySheet::DoModal(LPCTSTR pszFontFaceName, WORD wFontSize)
{
   Init(pszFontFaceName, wFontSize);
   return CBCGPPropertySheetCtrl::DoModal();
}

/*****************************************************************************************
 Function:   CCBPropertySheet::DoModal
 Purpose:    Creates a modal property sheet.
 Remarks:    Call this function for creating modal property sheets with DEFAULT FONT.
******************************************************************************************/
DOMODAL_RET CCBPropertySheet::DoModal()
{
   Init(NULL, 0);
   return CBCGPPropertySheetCtrl::DoModal();
}

/*****************************************************************************************
 Function:   CCBPropertySheet::Init
 Purpose:    Initializes font info as well as PROPSHEETHEADER structure in order to 
             use application-defined callback function (CCBPropertySheet::PropSheetProc).
 Parameters: - pszFontFaceName: Font face name.
             - wFontSize: Font size.
 Remarks:    Called either from Create and DoModal functions.
             If m_wFontSize = 0 or pszFontFaceName is NULL then default font will be used.
******************************************************************************************/
void CCBPropertySheet::Init(LPCTSTR pszFontFaceName, WORD wFontSize)
{
   m_pszFontFaceName = pszFontFaceName;
   m_wFontSize = wFontSize;

   if((m_wFontSize > 0) && (NULL != m_pszFontFaceName))
   {
      m_psh.pfnCallback = &CCBPropertySheet::PropSheetProc;
      m_psh.dwFlags |= PSH_USECALLBACK;
   }
}

/*****************************************************************************************
 Function: CCBPropertySheet::BuildPropPageArray
 Purpose:  Overrides CPropertySheet::BuildPropPageArray
******************************************************************************************/
void CCBPropertySheet::BuildPropPageArray()
{
   CBCGPPropertySheetCtrl::BuildPropPageArray();

   if((m_wFontSize > 0) && (NULL != m_pszFontFaceName))
   {
      LPCPROPSHEETPAGE ppsp = m_psh.ppsp;
      const int nSize = static_cast<int>(m_pages.GetSize());

      for(int nPage = 0; nPage < nSize; nPage++)
      {
         const DLGTEMPLATE* pResource = ppsp->pResource;
         CDialogTemplate dlgTemplate(pResource);
         dlgTemplate.SetFont(m_pszFontFaceName, m_wFontSize);
         memmove((void*)pResource, dlgTemplate.m_hTemplate, dlgTemplate.m_dwTemplateSize);

         (BYTE*&)ppsp += ppsp->dwSize;
      }
   }
}

uj5u.com熱心網友回復:

Windows的補丁上面摞補丁上面摞補丁上面摞補丁上面摞補丁上面摞補丁上面摞補丁上面摞補丁……

轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/79683.html

標籤:界面

上一篇:mfc靜態文本背景色運行一段時間后變白

下一篇:MFC下使用ODBC連接Oracle資料庫問題

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • Git本地庫既關聯GitHub又關聯Gitee

    創建代碼倉庫 使用gitee舉例(github和gitee差不多) 1.在gitee右上角點擊+,選擇新建倉庫 ? 2.選擇填寫倉庫資訊,然后進行創建 ? 3.服務端已經準備好了,本地開始作準備 (1)Git 全域設定 git config --global user.name "成鈺" git c ......

    uj5u.com 2020-09-10 05:04:14 more
  • CODING DevOps 代碼質量實戰系列第二課,相約周三

    隨著 ToB(企業服務)的興起和 ToC(消費互聯網)產品進入成熟期,線上故障帶來的損失越來越大,代碼質量越來越重要,而「質量內建」正是 DevOps 核心理念之一。**《DevOps 代碼質量實戰(PHP 版)》**為 CODING DevOps 代碼質量實戰系列的第二課,同時也是本系列的 PHP ......

    uj5u.com 2020-09-10 05:07:43 more
  • 推薦Scrum書籍

    推薦Scrum書籍 直接上干貨,推薦書籍清單如下(推薦有順序的哦) Scrum指南 Scrum精髓 Scrum敏捷軟體開發 Scrum捷徑 硝煙中的Scrum和XP : 我們如何實施Scrum 敏捷軟體開發:Scrum實戰指南 Scrum要素 大規模Scrum:大規模敏捷組織的設計 用戶故事地圖 用 ......

    uj5u.com 2020-09-10 05:07:45 more
  • CODING DevOps 代碼質量實戰系列最后一課,周四發車

    隨著 ToB(企業服務)的興起和 ToC(消費互聯網)產品進入成熟期,線上故障帶來的損失越來越大,代碼質量越來越重要,而「質量內建」正是 DevOps 核心理念之一。 **《DevOps 代碼質量實戰(Java 版)》**為 CODING DevOps 代碼質量實戰系列的最后一課,同時也是本系列的 ......

    uj5u.com 2020-09-10 05:07:52 more
  • 敏捷軟體工程實踐書籍

    Scrum轉型想要做好,第一步先了解并真正落實Scrum,那么我推薦的Scrum書籍是要看懂并實踐的。第二步是團隊的工程實踐要做扎實。 下面推薦工程實踐書單: 重構:改善既有代碼的設計 決議極限編程 : 擁抱變化 代碼整潔代碼 程式員的職業素養 修改代碼的藝術 撰寫可讀代碼的藝術 測驗驅動開發 : ......

    uj5u.com 2020-09-10 05:07:55 more
  • Jenkins+svn+nginx實作windows環境自動部署vue前端專案

    前面文章介紹了Jenkins+svn+tomcat實作自動化部署,現在終于有空抽時間出來寫下Jenkins+svn+nginx實作自動部署vue前端專案。 jenkins的安裝和配置已經在前面文章進行介紹,下面介紹實作vue前端專案需要進行的哪些額外的步驟。 注意:在安裝jenkins和nginx的 ......

    uj5u.com 2020-09-10 05:08:49 more
  • CODING DevOps 微服務專案實戰系列第一課,明天等你

    CODING DevOps 微服務專案實戰系列第一課**《DevOps 微服務專案實戰:DevOps 初體驗》**將由 CODING DevOps 開發工程師 王寬老師 向大家介紹 DevOps 的基本理念,并探討為什么現代開發活動需要 DevOps,同時將以 eShopOnContainers 項 ......

    uj5u.com 2020-09-10 05:09:14 more
  • CODING DevOps 微服務專案實戰系列第二課來啦!

    近年來,工程專案的結構越來越復雜,需要接入合適的持續集成流水線形式,才能滿足更多變的需求,那么如何優雅地使用 CI 能力提升生產效率呢?CODING DevOps 微服務專案實戰系列第二課 《DevOps 微服務專案實戰:CI 進階用法》 將由 CODING DevOps 全堆疊工程師 何晨哲老師 向 ......

    uj5u.com 2020-09-10 05:09:33 more
  • CODING DevOps 微服務專案實戰系列最后一課,周四開講!

    隨著軟體工程越來越復雜化,如何在 Kubernetes 集群進行灰度發布成為了生產部署的”必修課“,而如何實作安全可控、自動化的灰度發布也成為了持續部署重點關注的問題。CODING DevOps 微服務專案實戰系列最后一課:**《DevOps 微服務專案實戰:基于 Nginx-ingress 的自動 ......

    uj5u.com 2020-09-10 05:10:00 more
  • CODING 儀表盤功能正式推出,實作作業資料可視化!

    CODING 儀表盤功能現已正式推出!該功能旨在用一張張統計卡片的形式,統計并展示使用 CODING 中所產生的資料。這意味著無需額外的設定,就可以收集歸納寶貴的作業資料并予之量化分析。這些海量的資料皆會以圖表或串列的方式躍然紙上,方便團隊成員隨時查看各專案的進度、狀態和指標,云端協作迎來真正意義上 ......

    uj5u.com 2020-09-10 05:11:01 more
最新发布
  • windows系統git使用ssh方式和gitee/github進行同步

    使用git來clone專案有兩種方式:HTTPS和SSH:
    HTTPS:不管是誰,拿到url隨便clone,但是在push的時候需要驗證用戶名和密碼;
    SSH:clone的專案你必須是擁有者或者管理員,而且需要在clone前添加SSH Key。SSH 在push的時候,是不需要輸入用戶名的,如果配置... ......

    uj5u.com 2023-04-19 08:41:12 more
  • windows系統git使用ssh方式和gitee/github進行同步

    使用git來clone專案有兩種方式:HTTPS和SSH:
    HTTPS:不管是誰,拿到url隨便clone,但是在push的時候需要驗證用戶名和密碼;
    SSH:clone的專案你必須是擁有者或者管理員,而且需要在clone前添加SSH Key。SSH 在push的時候,是不需要輸入用戶名的,如果配置... ......

    uj5u.com 2023-04-19 08:35:34 more
  • 2023年農牧行業6大CRM系統、5大場景盤點

    在物聯網、大資料、云計算、人工智能、自動化技術等現代資訊技術蓬勃發展與逐步成熟的背景下,數字化正成為農牧行業供給側結構性變革與高質量發展的核心驅動因素。因此,改造和提升傳統農牧業、開拓創新現代智慧農牧業,加快推進農牧業的現代化、資訊化、數字化建設已成為農牧業發展的重要方向。 當下,企業數字化轉型已經 ......

    uj5u.com 2023-04-18 08:05:44 more
  • 2023年農牧行業6大CRM系統、5大場景盤點

    在物聯網、大資料、云計算、人工智能、自動化技術等現代資訊技術蓬勃發展與逐步成熟的背景下,數字化正成為農牧行業供給側結構性變革與高質量發展的核心驅動因素。因此,改造和提升傳統農牧業、開拓創新現代智慧農牧業,加快推進農牧業的現代化、資訊化、數字化建設已成為農牧業發展的重要方向。 當下,企業數字化轉型已經 ......

    uj5u.com 2023-04-18 08:00:18 more
  • 計算機組成原理—存盤器

    計算機組成原理—硬體結構 二、存盤器 1.概述 存盤器是計算機系統中的記憶設備,用來存放程式和資料 1.1存盤器的層次結構 快取-主存層次主要解決CPU和主存速度不匹配的問題,速度接近快取 主存-輔存層次主要解決存盤系統的容量問題,容量接近與價位接近于主存 2.主存盤器 2.1概述 主存與CPU的聯 ......

    uj5u.com 2023-04-17 08:20:31 more
  • 談一談我對協同開發的一些認識

    如今各互聯網公司普通都使用敏捷開發,采用小步快跑的形式來進行專案開發。如果是小專案或者小需求,那一個開發可能就搞定了。但對于電商等復雜的系統,其功能多,結構復雜,一個人肯定是搞不定的,所以都是很多人來共同開發維護。以我曾經待過的商城團隊為例,光是后端開發就有七十多人。 為了更好地開發這類大型系統,往 ......

    uj5u.com 2023-04-17 08:18:55 more
  • 專案管理PRINCE2核心知識點整理

    PRINCE2,即 PRoject IN Controlled Environment(受控環境中的專案)是一種結構化的專案管理方法論,由英國政府內閣商務部(OGC)推出,是英國專案管理標準。
    PRINCE2 作為一種開放的方法論,是一套結構化的專案管理流程,描述了如何以一種邏輯性的、有組織的方法,... ......

    uj5u.com 2023-04-17 08:18:51 more
  • 談一談我對協同開發的一些認識

    如今各互聯網公司普通都使用敏捷開發,采用小步快跑的形式來進行專案開發。如果是小專案或者小需求,那一個開發可能就搞定了。但對于電商等復雜的系統,其功能多,結構復雜,一個人肯定是搞不定的,所以都是很多人來共同開發維護。以我曾經待過的商城團隊為例,光是后端開發就有七十多人。 為了更好地開發這類大型系統,往 ......

    uj5u.com 2023-04-17 08:18:00 more
  • 專案管理PRINCE2核心知識點整理

    PRINCE2,即 PRoject IN Controlled Environment(受控環境中的專案)是一種結構化的專案管理方法論,由英國政府內閣商務部(OGC)推出,是英國專案管理標準。
    PRINCE2 作為一種開放的方法論,是一套結構化的專案管理流程,描述了如何以一種邏輯性的、有組織的方法,... ......

    uj5u.com 2023-04-17 08:17:55 more
  • 計算機組成原理—存盤器

    計算機組成原理—硬體結構 二、存盤器 1.概述 存盤器是計算機系統中的記憶設備,用來存放程式和資料 1.1存盤器的層次結構 快取-主存層次主要解決CPU和主存速度不匹配的問題,速度接近快取 主存-輔存層次主要解決存盤系統的容量問題,容量接近與價位接近于主存 2.主存盤器 2.1概述 主存與CPU的聯 ......

    uj5u.com 2023-04-17 08:12:06 more