1. 程式人生 > >MFC中在檢視視窗顯示點陣圖

MFC中在檢視視窗顯示點陣圖

本例將在單文件工程的檢視視窗中顯示一副點陣圖,視窗的左邊為原圖,右邊為放大後的點陣圖。

本例的demo如下:


首先    在資源檢視中插入一副點陣圖,然後在Ondraw函式中實在載入點陣圖和顯示



void CMFCApplication18View::OnDraw(CDC* pDC)
{
CMFCApplication18Doc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;




// TODO:  在此處為本機資料新增繪製程式碼


CBitmap bitmap;
CDC dcmem;
bitmap.LoadBitmapW(IDB_BITMAP1);
dcmem.CreateCompatibleDC(pDC);
dcmem.SelectObject(&bitmap);


pDC->BitBlt(0, 0, 200, 150, &dcmem, 0, 0, SRCCOPY);


pDC->TextOutW(40, 170, _T("原始點陣圖影象"));


pDC->StretchBlt(210, 0, 300, 226, &dcmem, 0, 0, 200, 150, SRCCOPY);
}

要點:

顯示DDB點陣圖的時候,將點陣圖載入記憶體裝置環境後,需要使用CDC類提供的BitBlt函式將DC中點陣圖複製到目的DC中。BitBlt函式原型如下:

BOOL BitBlt(HDC hdcDest,
  int nXDest,
  int nYDest,
  int nWidth,
  int nHeight,
  HDC hdcSrc,
  int nXSrc,
  int nYSrc,
  DWORD dwRop); Public Declare Function BitBlt Lib "gdi32" Alias "BitBlt" (ByVal hDestDC As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As Long
hDestDC:指向目標裝置環境的
控制代碼
。 x:指定目標矩形區域左上角的X軸邏輯座標。 y:指定目標矩形區域左上角的Y軸邏輯座標。 nWidth:指定源在目標矩形區域的邏輯寬度。 nHeight:指定源在目標矩形區域的邏輯高度。 hSrcDC:指向源裝置環境的控制代碼。 xSrc:指定源矩形區域左上角的X軸邏輯座標。 ySrc:指定源矩形區域左上角的Y軸邏輯座標。 dwRop:指定光柵操作程式碼。這些程式碼將定義源矩形區域的顏色資料,如何與目標矩形區域的顏色資料組合以完成最後的顏色。 下面列出了一些常見的光柵操作程式碼: BLACKNESS:表示使用與物理調色盤的索引0相關的色彩來填充目標矩形區域,(對預設的物理調色盤而言,該顏色為黑色)。 DSTINVERT:表示使目標矩形區域顏色取反。 MERGECOPY:表示使用
布林
型的AND(與)操作符將源矩形區域的顏色與特定模式組合一起。 MERGEPAINT:通過使用布林型的OR(或)操作符將反向的源矩形區域的顏色與目標矩形區域的顏色合併。 NOTSRCCOPY:將源矩形區域顏色取反,於拷貝到目標矩形區域。 NOTSRCERASE:使用布林型別的OR(或)操作符組合源和目標矩形區域的顏色值,然後將合成的顏色取反。 PATCOPY:將特定的模式拷貝到目標點陣圖上。 PATPAINT:通過使用布林OR(或)操作符將源矩形區域取反後的顏色值與特定模式的顏色合併。然後使用OR(或)操作符將該操作的結果與目標矩形區域內的顏色合併。 PATINVERT:通過使用XOR(異或)操作符將源和目標矩形區域內的顏色合併。 SRCAND:通過使用AND(與)操作符來將源和目標矩形區域內的顏色合併。 SRCCOPY:將源矩形區域直接拷貝到目標矩形區域。 SRCERASE:通過使用AND(與)操作符將目標矩形區域顏色取反後與源矩形區域的顏色值合併。 SRCINVERT:通過使用布林型的XOR(異或)操作符將源和目標矩形區域的顏色合併。 SRCPAINT:通過使用布林型的OR(或)操作符將源和目標矩形區域的顏色合併。 WHITENESS:使用與物理調色盤中索引1有關的顏色填充目標矩形區域。(對於預設物理調色盤來說,這個顏色就是白色)。 dwRop Values From wingdi.h: #define BLACKNESS 0x42 #define DSTINVERT 0x550009 #define MERGECOPY 0xC000CA #define MERGEPAINT 0xBB0226 #define NOTSRCCOPY 0x330008 #define NOTSRCERASE 0x1100A6 #define PATCOPY 0xF00021 #define PATINVERT 0x5A0049 #define PATPAINT 0xFB0A09 #define SRCAND 0x8800C6 #define SRCCOPY 0xCC0020 #define SRCERASE 0x440328 #define SRCINVERT 0x660046 #define SRCPAINT 0xEE0086 #define WHITENESS 0xFF0062

3返回值編輯

如果函式成功,那麼返回值非零;如果函式失敗,則返回值為零。 Windows NT:若想獲取更多錯誤資訊,請呼叫GetLastError函式。 備註:如果在源裝置環境中可以實行旋轉或剪下變換,那麼函式BitBlt返回一個錯誤。如果存在其他變換(並且目標裝置環境中匹配變換無效),那麼目標裝置環境中的矩形區域將在需要時進行拉伸、壓縮或旋轉。 如果源和目標裝置環境的顏色格式不匹配,那麼BitBlt函式將源場景的顏色格式轉換成能與目標格式匹配的格式。當正在記錄一個增強型圖元檔案時,如果源裝置環境標識為一個增強型圖元檔案裝置環境,那麼會出現錯誤。如果源和目標裝置環境代表不同的裝置,那麼BitBlt函式返回錯誤。 Windows CE:在Windows CE 1.0版中,引數dwRop只可以指定為下列值:SRCCOPY、SRCAND、SRCPAINT、SRCINVERT。在Windows CE 2.0版中,引數dwRop可以是任何光柵操作程式碼值。 速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:1.0及以上版本;標頭檔案:wingdi.h;庫檔案:gdi32.lib。

相關推薦

MFC檢視視窗顯示點陣

本例將在單文件工程的檢視視窗中顯示一副點陣圖,視窗的左邊為原圖,右邊為放大後的點陣圖。 本例的demo如下: 首先    在資源檢視中插入一副點陣圖,然後在Ondraw函式中實在載入點陣圖和顯示 void CMFCApplication18View::OnDra

MFC實現簡單的點陣顯示、處理

最近在做影象採集的工作,需要處理影象資料,所以學習了一下點陣圖顯示,而且只看了裝置相關點陣圖DDB。基本上實現了點陣圖的顯示、點陣圖資料的處理等功能。這裡就記錄一下我自己的理解,不一定全都對,僅供參考而已。 要顯示點陣圖,需要做如下工作: CStatic* pStati

基於VC6.0的控制檯作圖--顯示點陣(bmp)

文章目錄 GDI是什麼? 用`LoadImage`讀取點陣圖bmp檔案 將點陣圖選入記憶體相容區 將記憶體相容區拷貝到螢幕區 恢復現場 銷燬臨時的記憶體DC 例項 ( showbmp.cpp) 進一步的改

【遊戲程式設計】顯示點陣

執行結果: 原始碼: #include <windows.h> #pragma comment(lib, "winmm.lib") //呼叫PlaySound函式所需庫檔案t #define WINDOW_WIDTH 600 #defin

從Tensorflow模型檔案解析並顯示網路結構(CKPT模型篇)

上一篇文章《從Tensorflow模型檔案中解析並顯示網路結構圖(pb模型篇)》中介紹瞭如何從pb模型檔案中提取網路結構圖並實現視覺化,本文介紹如何從CKPT模型檔案中提取網路結構圖並實現視覺化。理論上

VS2010 用CxImage讀入各種圖片格式後在記憶體轉換為HBITMAP點陣

最近自學遊戲引擎設計,希望將各種圖片格式讀入記憶體後轉為HBITMAP處理,四處搜尋無果,最終參考以下兩篇博文自己搞定之 http://blog.csdn.net/wu_xiangwei/article/details/5096529 http://www.cnblogs.

關於MFC視窗與子視窗視窗與子視窗之間的資訊傳遞及控制

因為專案的需要,某子視窗B的設定變動,經常需要聯動其他子視窗C,或者父視窗A控制元件的名稱更新,資料更新等等問題。再網上查了許久,不得解 ,特拋磚引玉,提供幾種思路。      以下都以A為父視窗,A1為A中的Tab控制元件, B和C為子視窗被非模態創建於A1上,所以之間的

MFC隱藏、顯示選單欄

在設計MFC Dialog時,有時候會隱藏某些特殊的Menu並顯示其他的menu 1.隱藏選單欄  CWnd *pWnd=AfxGetMainWnd(); pWnd->SetMenu(NULL); pWnd->DrawMenuBar(); 2.顯示選單欄 CMe

MFC設定視窗大小位置

第一種方法:使用SetWindowPos函式 CWnd::SetWindowPosBOOL   SetWindowPos(   const   CWnd*   pWndInsertAfter,   int   x,   int   y,   int   cx,   int

用Glide載入圖片到Recyclerview有時候只顯示佔位的問題

1、IllegalArgumentException: You cannot start a load for a destroyed activity @TargetApi(Build.VERSION_CODES.JELLY_BEAN_M

MFC靜態文字框貼處理

1.靜態文字控制元件貼png圖片     在建立控制元件時新增SS_BITMAP屬性SS_NOTIFY     CImage m_Icon.Load(wstring(L"tupian.png").c_str());     RECT rect;     HDC pDC =

Source Insight檢視檔案顯示全路徑

使用Source insight的時候想看檔案的全路徑,但是預設的是中間省略的路徑,所以可以通過: 1.Options-->Preferences-->Display 設定Trim long path names with ellipses為取消選擇。如圖

【Tiny6410 And Linux】—(6.2)—LCD 驅動測試程式(BMP 顯示點陣)——程式碼

剛才看個小視訊,關於華山遊客滯留的,哎,真是花錢買罪吃,下回一定得選好旅遊地點! 少點廢話,上一篇文章是關於 LCD 測試程式(BMP 顯示點陣圖)的基本原理的介紹,今天就發一下程式碼吧,由於中間遇到點小問題,我的測試程式總是出現Segmentation Fault這樣的

MFC程式檢視顯示

1,view類檢視的顯示重新整理 Invalidate(); Invalidate()呼叫OnDraw()函式實現重繪。 2,doc類和view類的呼叫 CvtkSDIView *pView = (CvtkSDIView *)((CMainFrame *)AfxGetApp

MFC實現點陣的透明顯示

好久沒寫部落格了,嘗試著重新開張~ 最近在協助同事修改原有的一個程式,因為要申請個什麼東西,介面上也一直在下功夫。 原來的程式介面是用MFC做的,想新增一些圖片,不過圖片都不是矩形,周圍有白邊,為此,想將這些白邊做透明處理。遍尋網上解決方案,有所獲,如下: 我們在

OpenCV視窗繫結到MFC用以顯示視訊或圖片資料

當使用MFC和OpenCV顯示圖片資料時,很多采用將Mat型別的圖片資料轉成CvvImage型別,然後在MFC的視窗中進行顯示,但是將面臨需要額外的標頭檔案CvvImage的問題。而將OpenCV的視窗與MFC中的圖片顯示控制元件進行繫結後就不需要CvvImage這個類了,同

MFC當儲存點陣時,圖片為全黑的解決辦法

        需要建立相容點陣圖,建立相容DC,然後需要將點陣圖選入DC中,再將螢幕DC的影象拷貝到建立的相容記憶體DC中。 ······ CRect rect1; GetClientRect(&rect1);

mfc編輯框輸入垂直居中&字型調整&不採用password屬性進行密碼輸入&vs2013載入bitmap點陣

第一部分:mfc編輯框輸入垂直居中 處理前:編輯框游標靠上,不太美觀 處理後:游標垂直居中 操作: 1)將編輯框屬性中的Align Text 選擇為Center 2)將編輯框屬性中的Multil

opencv筆記(三十四)——在MFC的picture控制元件如何顯示Mat

        想把kinect V1.0裝置獲取到的彩色圖顯示在MFC的picture控制元件中,圖的格式是opencv中的Mat矩陣,每秒30幀,顯示相對還是比較流暢。整個介面由一個函式完成,函式無返回值,要求輸入pictur

如何在mfc對話方塊新增一個顯示網頁的視窗

這個要用到 ActiveX 控制元件了,向對話方塊裡面插入一個 WebBrowser控制元件,之後使用就可以了!=============================利用WebBrowser控制元件建立自己的瀏覽器①新建一個基於對話方塊的工程,命名為test,然後在對話方塊上單擊右鍵,選擇Insert A