vc++工作筆記1
1) 透明位圖按鈕
在對話框上添加一個按鈕,定義按鈕的風格爲BS_OWNERDRAW(自畫風格),添加一個按鈕類繼承於CButton,重載虛函數virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);這個函數的作用就是在改變按鈕。可以變成ICON,也可以變成位圖,要想改變按鈕的背景還必須執行消息WM_ ERASEBKGND的消息函數OnEraseBkgnd(CDC* pDC),在此函數設備內顯示圖片。
2) 嵌套窗體的實現
嵌套窗體可以使兩個窗體分開來寫各自的功能,然後把這兩個窗體融合在第三個窗體內,可以使功能開發更加清晰。首先這兩個窗體必需是第三個窗體的成員變量,即在第三個窗體類中定義這兩個窗體類的成員,如
CDialogue1 m_cDialogue1;
CDialogue1 m_cDialogue2;
在初始化對話框時或着在你要添加窗體的函數中實現一下代碼:
//添加第一個窗體
m_cDialogue1.Create(IDD_DIALOG1,this);//創建窗體
m_cDialogue1.MoveWindow(nPosX1,nPosY1,nWidth,nHeight,TRUE);//定位窗體
m_cDialogue1.ShowWindow(SW_SHOW);//顯示窗體
//添加第二個窗體
m_cDialogue2.Create(IDD_DIALOG2,this);//創建窗體
m_cDialogue2.MoveWindow(nPosX2,nPosY2,nWidth,nHeight,TRUE);//定位窗體
m_cDialogue2.ShowWindow(SW_SHOW);//顯示窗體
即可實現嵌套窗體
3) 在對話框窗體上打印文字
在對話框窗體上顯示文字,在實現WM_PAINT消息的OnPaint()函數中實現一下類似的代碼:
CClientDC dc1(this);/定義客戶區域顯示設備
CFont mFont;//定義一個類字體變量
dc1.SetTextColor(crColor);//設置字體的顏色
dc1.SetBkMode(TRANSPARENT);//設置顯示文字的背景透明
VERIFY(mFont.CreateFont(
30, 30, 0, 0, FW_HEAVY, false, FALSE,
0, ANSI_CHARSET, OUT_DEFAULT_PRECIS,
CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY,
DEFAULT_PITCH | FF_SWISS, "宋體"));//創建字體的大小30X30,宋體,不是斜體
CFont * pOldFont;
pOldFont = dc1.SelectObject( &mFont );//把文字載入設備
dc1.TextOut(0,30,szNum);//打印文字
UpdateWindow();
在視頻上不斷的顯示數字,視頻會不斷的更新窗體,導致最開始打印的在對話框上數字被視頻更新,如何讓視頻上不斷的顯示數字,一個最簡單的方法就是定義一個定時器把上述過程寫在一個函數裏,定時器不斷地調用這個函數,但是這樣也有缺點,就是當定時器很多時,定時器執行很多函數,導致這個過程變慢,字體在視頻上顯示就是不斷閃爍,定時器內執行的程序很少時,就看不出來閃爍。
4)在視頻上添加按鈕
直接在視頻中添加按鈕,視頻會不斷的更新窗體,導致按鈕會被更新的視頻隱埋,如何在視頻上一直顯示按鈕,人工實現控件的更新,如下代碼:
CButton m_Button;//定義一個按鈕成員
m_Button.GetClientRect(rect);//獲得按鈕的客戶區域
m_Button.InvalidateRect(rect,true);//更新按鈕
但是執行一次的話,按鈕還是會只出現一次,最簡單的方法還是把此過程寫在定時器中,不斷的執行按鈕更新,還是一樣的問題如果定時器內執行的過程過多的話,按鈕會出現閃爍的現象,所以不要在定時器裏寫太多的執行過程。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.