win32開發(檔案、字型和色彩)
【 宣告:版權所有,歡迎轉載,請勿用於商業用途。 聯絡信箱:feixiaoxing @163.com】
在作業系統上,檔案選擇、色彩選擇、和字型選擇這些功能一般都是作業系統提供的。記得以前在寫mfc的時候,由於基本功能都是mfc封裝好的,每次呼叫的時候都覺得非常得神奇,等到後來有機會用win32 api寫的時候,才發現編寫這些功能遠比我們想象得要簡單。對於這些功能,mfc只不過簡單的封裝了一下,沒有做什麼特別的處理,
下面,我們就要看看這些功能分別是怎麼實現的。這些程式碼都是從msdn copy過來的,略微做了一些修改。首先,我們看一下檔案對話方塊怎麼寫,
OPENFILENAME ofn; // common dialog box structure char szFile[260]; // buffer for file name HANDLE hf; // file handle // Initialize OPENFILENAME ZeroMemory(&ofn, sizeof(OPENFILENAME)); ofn.lStructSize = sizeof(OPENFILENAME); ofn.hwndOwner = hWnd; ofn.lpstrFile = szFile; szFile[0] = '\0'; ofn.nMaxFile = sizeof(szFile); ofn.lpstrFilter = "All\0*.*\0Text\0*.TXT\0"; ofn.nFilterIndex = 1; ofn.lpstrFileTitle = NULL; ofn.nMaxFileTitle = 0; ofn.lpstrInitialDir = NULL; ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST; // Display the Open dialog box. if (GetOpenFileName(&ofn)==TRUE) ;
其次就是字型對話方塊,程式碼如下,
最後就是色彩對話方塊,CHOOSEFONT cf; // common dialog box structure static LOGFONT lf; // logical font structure static DWORD rgbCurrent; // current text color HFONT hfont, hfontPrev; DWORD rgbPrev; // Initialize CHOOSEFONT ZeroMemory(&cf, sizeof(CHOOSEFONT)); cf.lStructSize = sizeof (CHOOSEFONT); cf.hwndOwner = hWnd; cf.lpLogFont = &lf; cf.rgbColors = rgbCurrent; cf.Flags = CF_SCREENFONTS | CF_EFFECTS; if (ChooseFont(&cf)==TRUE) { }
上面這些程式碼,大家都可以直接使用,嵌入到自己的專案當中。如果是為了demo驗證,建議大家先新增一個按鈕,然後在WM_COMMAND裡面直接呼叫這些函式,看看效果和預期的是否相同。CHOOSECOLOR cc; // common dialog box structure static COLORREF acrCustClr[16]; // array of custom colors HBRUSH hbrush; // brush handle static DWORD rgbCurrent; // initial color selection // Initialize CHOOSECOLOR ZeroMemory(&cc, sizeof(CHOOSECOLOR)); cc.lStructSize = sizeof(CHOOSECOLOR); cc.hwndOwner = hWnd; cc.lpCustColors = (LPDWORD) acrCustClr; cc.rgbResult = rgbCurrent; cc.Flags = CC_FULLOPEN | CC_RGBINIT; if (ChooseColor(&cc)==TRUE) { }
相關推薦
win32開發(檔案、字型和色彩)
【 宣告:版權所有,歡迎轉載,請勿用於商業用途。 聯絡信箱:feixiaoxing @163.com】 在作業系統上,檔案選擇、色彩選擇、和字型選擇這些功能一般都是作業系統提供的。記得以前在寫mfc的時候,由於基本功能都是mfc封裝好的,每次呼叫的時候都覺得非常得神奇,
django2.0 中如何顯示靜態檔案(圖片、css 和js )
參考了幾個部落格,然後總結了一下,有誤請指正。 這是我相關檔案的路徑 1.在settings.py 檔案的末尾加上加上以下程式碼: STATIC_URL = '/static/' HERE = os.path.dirname(os.path.abspath(
後臺開發知識點總結(一、Linux和OS)
偶然在知乎上看到想要從事linux後臺開發需要的能力集錦,總結的挺全面的,鑑於自己貧弱的記憶力,還是在這裡總結一下供以後檢視,順便檢驗一下自己。 1、 命令:netstat tcpdump ipcs ipcrm 這四個命令的熟練掌握程度基本上能體現實際開發和除錯程式的
JavaScript 開發框架橫向比對(Vue、React 和 Angular)
1 背景比對 比對 Vue React Angular 出現年月 2013-7 2013-3 2010-1 框架型別 MVVM MVC MVW 開源許可 MIT license B
深度學習綜述(LeCun、Bengio和Hinton)
想法 會有 區分 足夠 乘法 開發 訓練 repr 追蹤 原文摘要:深度學習可以讓那些擁有多個處理層的計算模型來學習具有多層次抽象的數據的表示。這些方法在很多方面都帶來了顯著的改善,包含最先進的語音識別、視覺對象識別、對象檢測和很多其他領域,比如藥物發現和基因組學等。深
Oracle學習筆記—oracle體系架構及狀態(nomount、mount和open)簡介
位置 正常 處理 管理 共享服務器 體系 操作記錄 sysdba png oracle體系架構簡介 先來簡要了解一下Oracle數據庫體系架構以便於後面深入理解,Oracle Server主要由實例(instance)和數據庫(database)組成。實例(instance
修改this指向(bind、call 和 apply)
self 全局 () 用法 兼容 {} ins his post 一、bind 首先: var alertWrite = document.write; alertWrite(‘who am I?‘); 這兩行代碼的運行結果是什麽呢?不要急著回答,看完下面的內容再回答
zookeeper(四):核心原理(Watcher、事件和狀態)
ted sso 兩個 reat exist 這一 通過 投票 children zookeeper主要是為了統一分布式系統中各個節點的工作狀態,在資源沖突的情況下協調提供節點資源搶占,提供給每個節點了解整個集群所處狀態的途徑。這一切的實現都依賴於zookeeper中的事件監
第一篇隨記:學習WAMP中最基礎的JDBC連線操作記錄( Statement、PreparedStatement和CallableStatement)
用Statement實現資料庫連線: <%@ page contentType="text/html" pageEncoding="UTF-8" %> <%@ page import="java.sql.*" %> <html> <
廖雪峰 JavaScript 學習筆記(字串、陣列和物件)
字串 1.和python一樣,也是用' '或" "括起來的字元表示。但多行字串是用反引號(esc下鍵)``,與之相對的是Python用''' '''三引號表示; 2.轉義字元:\ 3.換行符:\n 4.製表符:\t 5.多個字串用 + 連線 6.模板字串: ${變數} 例
關於阿里訊息佇列RocketMQ(安裝、使用和坑),你需要知道的事情
為什麼選擇RocketMQ Apache RocketMQ作為阿里開源的一款高效能、高吞吐量的分散式訊息中介軟體。因為阿里有海量的資料量,無數業務場景的應用,是RocketMQ搶盡風頭風頭,成為不可多得中介軟體專案,加上已經正式加入Apach俱樂部,作為頂級的開源專案! 一、關於
《Java8實戰》-第八章筆記(重構、測試和除錯)
重構、測試和除錯 通過本書的前七章,我們瞭解了Lambda和Stream API的強大威力。你可能主要在新專案的程式碼中使用這些特性。如果你建立的是全新的Java專案,這是極好的時機,你可以輕裝上陣,迅速地將新特性應用到專案中。然而不幸的是,大多數情況下你沒有機會從頭開始一個全新的專案。很多時候,你不得不面
JavaScript基礎回顧一(型別、值和變數)
請看程式碼並思考輸出結果 var scope = 'global'; function f(){ console.log(scope); var scope = 'local'; console.log(scope); } f(); var a = [];
非同步DCDC的工作模式(CCM、DCM和BCM)
目錄 1. 非同步DCDC的三種工作模式 非同步DCDC工作在哪種模式,取決於拓撲和輸出功率,輸入電壓和輸出電壓的大小。 CCM,連續導通模式,一個開關週期內電感電流>0。 DCM,斷續導通模式,一個開關週期內電感電流 ≥ 0。 BCM,臨界導通模式
JavaScript陣列的操作方法(concat、slice和splice)
ECMAScript 為運算元組中的項提供了很多方法,其中最常用的有:concat( ) 、slice( ) 和 splice( ) 。 concat ( ) concat ( ) 方法可以基於當前陣列中的項建立一個新的陣列。具體來說,這個方法會先建立一個當前陣列的副本,然後將
react路由基礎(Router、Link和Route)
Facebook對react進行持續的改進,路由作為其中最重要的一部分,在4.0版本對其進行了大量的優化,總的來說,簡單易用! 之前使用react路由的時候,我們引入的是react-router包。 現在改版之後,我們引入的包是react-router-do
【Inno Setup】修改安裝分割線前面的文字並自定義風格(顏色、字型大小等等)
[Messages] BeveledLabel=少莫千華 [Code] procedure InitializeWizard(); begin WizardForm.BeveledLabel.
C#中自定義控制元件隱藏基類成員(屬性、方法和事件)的方法
編寫自定義控制元件時,總是繼承C#中提供的Control類,而Control類是C#中所有窗體控制元件的基類,裡面定義了大量的屬性、方法和事件,而很多基類成員在自定義控制元件中可能不需要,因為編寫者會希望在自定義控制元件中隱藏這些成員,避免使用者呼叫這些成員。
Python學習第四天(變數、集合和字串)
上一篇沒有儲存傷心 變數在賦值時即被建立===賦值會讓變數自動生成 變數在表示式中使用以前 必須被賦值 ———————————————————————————————————————————————— 集合 集合中的一個項無論新增多少次,只能出現一次 集合是無序的、唯一的、不
Spark on YARN簡介與執行wordcount(master、slave1和slave2)(博主推薦)
前期部落格 Spark On YARN模式 這是一種很有前景的部署模式。但限於YARN自身的發展,目前僅支援粗粒度模式(Coarse-grained Mode)。這是由於YARN上的Container資源是不可以動態伸縮的,一旦Container啟動之後,可使用