學(xué)習(xí)收貨:
01日麸,這個作用蚁滋。(感覺還是很復(fù)雜啊,理解不了赘淮,一時半會)
鏈接:https://blog.csdn.net/minghui_/article/details/80748142
ifdef _DEBUG
define new DEBUG_NEW
endif
這樣就很清楚了辕录,當在 debug模式 下時,我們分配內(nèi)存時的new被替換成DEBUG_NEW梢卸,而這個DEBUG_NEW 不僅要傳入內(nèi)存塊的大小走诞,還要傳入源文件名和行號 ,這就有個好處蛤高,即當發(fā)生 內(nèi)存泄漏 時蚣旱,我們可以在調(diào)試模式下定位到該問題代碼處。若刪掉該句戴陡,就不能進行定位了塞绿。而在 release版本 下的new就是簡單的new,并不會傳入文件名和行號恤批。
因此异吻,我們在開發(fā)代碼階段,保留上述代碼是值得的喜庞。
=============================================================
02诀浪,notify屬性:其作用就是該控件被單擊或雙擊的時候?qū)⑾蚋讣壈l(fā)送通知
MFC控件的Notify屬性
MFC控件的屬性欄,有一個選項為Notify延都,其作用就是該控件被單擊或雙擊的時候?qū)⑾蚋讣壈l(fā)送通知雷猪。如果將其設(shè)置為false,父窗口就無法響應(yīng)鼠標點擊的消息晰房。有的時候在VS中創(chuàng)建的控件求摇,Notify選項默認是False。如果發(fā)現(xiàn)控件不響應(yīng)某些點擊事件殊者,很有可能是這個選項設(shè)置為false導(dǎo)致的与境。
===============================================
03,#CString.Format的詳細用法(轉(zhuǎn)):https://www.cnblogs.com/yzl050819/p/6019166.html
在MFC程序中幽污,使用CString來處理字符串是一個很不錯的選擇嚷辅。CString既可以處理Unicode標準的字符串,也可以處理ANSI標準的字符串距误。CString的Format方法給我們進行字符串的轉(zhuǎn)換帶來了很大的方便簸搞,比如常見的int扁位、float和double這些數(shù)字類型轉(zhuǎn)換為CString字符串只需一行代碼就可以實現(xiàn)。
先看看Format用于轉(zhuǎn)換的格式字符:
%c 單個字符
%d 十進制整數(shù)(int)
%ld 十進制整數(shù)(long)
%f 十進制浮點數(shù)(float)
%lf 十進制浮點數(shù)(double)
%o 八進制數(shù)
%s 字符串
%u 無符號十進制數(shù)
%x 十六進制數(shù)
1趁俊、int轉(zhuǎn)換為CString:
CString str;
int number=15;
//str="15"
str.Format(_T("%d"),number);
//str=" 15"(前面有兩個空格域仇;4表示將占用4位,如果數(shù)字超過4位將輸出所有數(shù)字寺擂,不會截斷)
str.Format(_T("%4d"),number);
//str="0015"(.4表示將占用4位暇务,如果數(shù)字超過4位將輸出所有數(shù)字,不會截斷)
str.Format(_T("%.4d"),number);
long轉(zhuǎn)換為CString的方法與上面相似怔软,只需要把%d改為%ld就可以了垦细。
================================================================
04,如何獲取某個窗口挡逼,或者控件的區(qū)域大欣ǜ摹?
//顯示區(qū)域矩形的獲取 ,數(shù)據(jù)存儲在showRect當中家坎。
CRect showRect;在頭文件定義了嘱能。
GetDlgItem(IDC_SHOW)->GetClientRect(&showRect);
============================================================
05,常用的函數(shù):atoi虱疏,itoa惹骂,atof,_ttoi等
鏈接:https://blog.csdn.net/zzyoucan/article/details/10260093
_ttoi---可以將CString轉(zhuǎn)換成整形
itoa---integer to ASCII--將整形轉(zhuǎn)換成字符串
atof---ascii to float--字符串轉(zhuǎn)換成浮點型
atol---ascii to long---字符串轉(zhuǎn)換成長整形
gcvt---浮點型轉(zhuǎn)換成字符串(四舍五入)
strtod---字符串轉(zhuǎn)換成浮點型
strtol---字符串轉(zhuǎn)換成長整形
strtoul--字符串轉(zhuǎn)換成無符號長整形
toascii---將整形轉(zhuǎn)換成合法的ASCII碼字符
============================================
06做瞪,重點函數(shù)对粪,分析
//放大屏幕某一指定的區(qū)域,并且把數(shù)據(jù)保存到bitmap對象當中穿扳。
//3個參數(shù)衩侥,第一個是顯示區(qū)域大小。第二矛物,放大的倍數(shù)。第三跪但,作為保存放大后的mBmp對象履羞。此參數(shù)是引用類型。
BOOL StretchScreenToBitmap(CRect tRect, int iZoom, CBitmap &outBmp)
{ //上節(jié)課有說明了屡久,下部分代碼忆首。
//::GetDC(NULL)--------獲取桌面的dc
CDC *pDC = CDC::FromHandle(::GetDC(NULL));
if (!pDC)
{
return false;
}
//獲取一下鼠標當前的坐標,存儲在pt結(jié)構(gòu)體當中被环。
CPoint pt;
GetCursorPos(&pt);
//獲取屏幕的寬和高
int xScreen = GetSystemMetrics(SM_CXSCREEN);
int yScreen = GetSystemMetrics(SM_CYSCREEN);
int iPosLeft = 0, iPosTop = 0;
//iWidth,iHeigh--是放大之后的尺寸糙及。
int iWidth = tRect.Width() / iZoom;
int iHeigh = tRect.Width() / iZoom;
CDC hMemDC, hTDc; //定義了2個內(nèi)存dc,為的是讓截圖的時候能把鼠標截圖下來
CBitmap tBmp, *pOldBmp = NULL;
//分別創(chuàng)建兼容的屏幕dc
hMemDC.CreateCompatibleDC(pDC); //該函數(shù)創(chuàng)建一個與指定設(shè)備兼容的內(nèi)存設(shè)備上下文環(huán)境(DC)筛欢。
hTDc.CreateCompatibleDC(pDC);
//創(chuàng)建了2個畫布浸锨。
outBmp.CreateCompatibleBitmap(pDC, tRect.Width(), tRect.Height()); //outBmp是傳出去的唇聘,所以他的寬和高,就得是處理過的寬和高柱搜。
tBmp.CreateCompatibleBitmap(pDC, xScreen, yScreen); //屏幕的寬和高迟郎。
//到了這一步,dc創(chuàng)建好了聪蘸,畫布也創(chuàng)建好了宪肖。下一步,就得選擇相應(yīng)的dc設(shè)備
pOldBmp = hMemDC.SelectObject(&outBmp);
hTDc.SelectObject(&tBmp); //hTDc保存的是整個屏幕的內(nèi)容健爬,并且向鼠標畫
//把整個屏幕的內(nèi)容-pDC拷貝到hTDc當中控乾。
hTDc.BitBlt(0, 0, xScreen, yScreen, pDC, 0, 0, SRCCOPY);
//繪制圖標。娜遵。
hTDc.DrawIcon(pt, AfxGetApp()->LoadIcon(IDR_MAINFRAME));
//實現(xiàn)一個功能阱持,選擇范圍,這個范圍在鼠標周圍魔熏。鼠標在中心
iPosLeft = (pt.x - iWidth / 2) > 0 ? (pt.x - iWidth / 2) : 0;
iPosTop = (pt.y - iHeigh / 2) > 0 ? (pt.y - iHeigh / 2) : 0;
iPosLeft = (pt.x + iWidth / 2) < xScreen ? iPosLeft : xScreen - iWidth;
iPosTop = (pt.y + iHeigh / 2) < yScreen ? iPosTop : yScreen - iHeigh;
//縮放復(fù)制位圖到設(shè)備上下文衷咽。前4個參數(shù),都是目標地區(qū)蒜绽,而hTDc是源設(shè)備指針
BOOL bRet = hMemDC.StretchBlt(0, 0, tRect.Width(), tRect.Height(), &hTDc, iPosLeft, iPosTop, iWidth, iHeigh, SRCCOPY);
tBmp.DeleteObject();
hMemDC.SelectObject(pOldBmp);//選擇GDI對象到設(shè)備環(huán)境當中镶骗。
hMemDC.DeleteDC();
hTDc.DeleteDC();
ReleaseDC(NULL, pDC->m_hDC);
return bRet;
}
=========================
07,總之躲雅,有點迷糊鼎姊,知識不成體系。
===============================
7分17秒相赁,下拉框賦值相寇,結(jié)束了。
9:09秒钮科,開始講解唤衫,開始嘍函數(shù)
===========================================================
10:59,添加定時器響應(yīng)函數(shù)
========================================
14:25绵脯,StretchScreenToBitmap函數(shù)的添加
StretchScreenToBitmap
BOOL StretchScreenToBitmap(CRect tRect, int iZoom, CBitmap &outBmp)
{
CDC *pDC = CDC::FromHandle(::GetDC(NULL));
if (!pDC )
{
return False;
}
CPoint pt;
GetCursorPos(&pt);
int xScreen = GetSystemMetrics(SM_CXSCREEN);
int yScreen = GetSystemMetrics(SM_CYSCREEN);
int iPOsLeft = 0, iPosTop = 0;
int iWidth = tRect.Width() / iZoom;
int iHeigh = tRect.Width() / iZoom;
CDC hMemDC, hTDc;
CBitmap tBmp, *pOldBmp = NULL;
hMemDC.CreateCompatibleDC(pDC);
hTDc.CreateCompatibleDC(pDC);
outBmp.CreateCompatibleBitmap(pDC, tRect.Width(), tRect.Height());
tBmp.CreateCompatibleBitmap(pDC, xScreen, yScreen);
pOldBmp = hMemDC.SelectObject(&outBmp);
hTDc.SelectObject(&tBmp);
hTDc.BitBlt(0, 0, xScreen, yScreen, pDC, 0, 0, SRCCOPY);
hTDc.DrawIcon(pt, AfxGetApp()->LoadIcon(IDI_CURSOR_ICON));
}
這個函數(shù)一直講解到32:56秒
============================
第六步佳励,34:12開始講解:DrawTargetBitmap函數(shù)
這個函數(shù),一直講解到39分鐘蛆挫。
第七部赃承,42分鐘20秒,開始講解悴侵。
============
第八部分:45:05開始講解
==========
最后老師留下了個作業(yè)瞧剖,
2個小作業(yè)!