1. 專案加入 memdc.h
from Here
2. 在 stdafx.h加入下一行
#include "memdc.h"
3. 修改訊息 WM_ERASEBKGND的回應 如下:
BOOL CExampleView::OnEraseBkgnd(CDC* pDC) { return FALSE; }
4.修改OnDrae的程式碼,如下
void CExampleView::OnDraw(CDC* dc) { CMemDC pDC(dc); CExampleDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); // TODO: add draw code for native data here - use pDC //as the device context to draw to }
星期日, 11月 27, 2011
[MFC] 繪圖時去除閃爍
星期一, 7月 04, 2011
[VS2010] VC常用快速鍵
Ctrl+] 在括號間移動(游標須在括號旁邊) Ctrl+'-' 移到游標先前所在位置 Ctrl+Shift+'-' 與上面相反 Ctrl+Shift+F 舊式的尋找工具 Ctrl+Tab 循環已開啟視窗 Ctrl+F3 尋找目前所選的文字 Ctrl+L 刪除目前行 Ctrl+W 選取文字(或一段空白) Ctrl+Up 立刻捲動視窗,不需移動游標 Ctrl+Down 立刻捲動視窗,不需移動游標
Ctrl+K,Ctrl+K 設定/取消 書籤 Ctrl+K,Ctrl+P 前往上一個書籤 Ctrl+K,Ctrl+N 前往下一個書籤
Ctrl+K,Ctrl+C 註解選擇文字或當前行 Ctrl+K,Ctrl+U 消去註解
Ctrl+K,Ctrl+F 格式化選取文字 Alt+F8 格式化選取文字
Ctrl+M,Ctrl+M 打開/關閉 程式區塊 Ctrl+M,Ctrl+O 關閉所有程式區塊
F12 移到變數或函式定義處 Shitf+F12 尋找變數的reference
Shift+Alt+Enter 全螢幕 Ctrl+Shift+V 開啟循環剪貼簿
Ctrl+Shift+R 錄製巨集 Ctrl+Shift+P 播放巨集
Alt+Shift+箭頭 以區塊選擇 Ctrl+Enter 上面增加空白行 Ctrl+Sfift+Enter 下面增加空白行
Ctrl+Shift+Comma(,) 字體縮小 (逗號加上Shift即是小於(<)符號) Ctrl+Shift+Period(.) 字體放大 (句號加上Shift即是大於(>)符號)
星期二, 11月 16, 2010
[MFC] Unicode環境下使用CStdioFile來存取中文檔案
因為CStdioFile並不支援Unicode所以無法存取Uncode檔案,而當存取ANSI檔案時又因為Unicode環境下而造成無法使用CStdioFile::ReadString()所讀到的CString。所以加入下面一行程式碼來設定讀入的檔案的地區編碼。
Windows环境下Unicode编程总结和将ANSI转换到Unicode 将Unicode转换到ANSI
setlocale( LC_CTYPE,"cht" );如果是簡體中文則將cht改為chs。
其他參考文章:解决UNICODE字符集下CStdioFile的Writestring无法写入中文的问题
Windows环境下Unicode编程总结和将ANSI转换到Unicode 将Unicode转换到ANSI
星期六, 1月 03, 2009
[MFC] 全螢幕功能-開始工作列未消失
原因是OnGetMinMaxInfo這個函式沒有被OverRide,
,最好是用ClassWizard,不要用手動。因為很可能會沒有效果。
要重寫此函式的原因如下:
程序中有一個地方要說明一下,那就是OnGetMinMaxInfo函數的作用。你可以試一下,如果把這個函數去掉,則當你按下工具欄中的全屏顯示按鈕時,框架視圖確實變大了,但沒有想像的那樣實現全屏顯示,底邊留下一個狀態欄——一個有些發育不良的全屏顯示窗口。為什麼會這樣呢?經過調試後,發現問題出在WM_GETMINMAXINFO消息的處理上。在Windows中,無論什麼時候以何種方式改變窗口的尺寸或大小,是拖拽窗口邊緣也好,或是在代碼中調用改變窗口尺寸的函數也好,總之不管你用什麼方法,Windows都會首先發送WM_GETMINMAXINFO消息。這個消息的意思是說:「嘿,如果你要強迫我的尺寸變大或變小,就附上詳細的MINMAXINFO結構信息,否則我用默認值處理。」大多數應用程序都不用顯式處理這個 WM_GETMINMAXINFO消息(也就是說讓DefWindowProc窗口過程進行缺省處理),而Windows在進行缺省處理時是不會讓一個窗口視圖比屏幕還大的,所以我們會碰上前面講的那個問題。解決的方法是:不要讓Windows對WM_GETMINMAXINFO消息進行缺省處理,而是由我們自己處理,方法如下:
,最好是用ClassWizard,不要用手動。因為很可能會沒有效果。
要重寫此函式的原因如下:
程序中有一個地方要說明一下,那就是OnGetMinMaxInfo函數的作用。你可以試一下,如果把這個函數去掉,則當你按下工具欄中的全屏顯示按鈕時,框架視圖確實變大了,但沒有想像的那樣實現全屏顯示,底邊留下一個狀態欄——一個有些發育不良的全屏顯示窗口。為什麼會這樣呢?經過調試後,發現問題出在WM_GETMINMAXINFO消息的處理上。在Windows中,無論什麼時候以何種方式改變窗口的尺寸或大小,是拖拽窗口邊緣也好,或是在代碼中調用改變窗口尺寸的函數也好,總之不管你用什麼方法,Windows都會首先發送WM_GETMINMAXINFO消息。這個消息的意思是說:「嘿,如果你要強迫我的尺寸變大或變小,就附上詳細的MINMAXINFO結構信息,否則我用默認值處理。」大多數應用程序都不用顯式處理這個 WM_GETMINMAXINFO消息(也就是說讓DefWindowProc窗口過程進行缺省處理),而Windows在進行缺省處理時是不會讓一個窗口視圖比屏幕還大的,所以我們會碰上前面講的那個問題。解決的方法是:不要讓Windows對WM_GETMINMAXINFO消息進行缺省處理,而是由我們自己處理,方法如下:
void CMainFrame::OnGetMinMaxInfo(MINMAXINFO FAR* lpMMI)
{
if (m_bFullScreen)
{
lpMMI->ptMaxSize.y = m_FullScreenWindowRect.Height();
lpMMI->ptMaxTrackSize.y = lpMMI->ptMaxSize.y;
lpMMI->ptMaxSize.x = m_FullScreenWindowRect.Width();
lpMMI->ptMaxTrackSize.x = lpMMI->ptMaxSize.x;
}
//CFrameWnd::OnGetMinMaxInfo(lpMMI);
}
星期三, 5月 07, 2008
[MFC] 攔截 ESC 鍵 或是其他鍵盤指令
基於Cdialog類別所寫出的視窗類別,預設當使用者按下Enter或Esc鍵時,會關閉視窗程式。如果要關閉此功能,需重載PreTranslateMessage函式。改寫如下:
BOOL CXXXDlg::PreTranslateMessage(MSG* pMsg)
{
if(pMsg->message==WM_KEYDOWN)
{
switch(pMsg->wParam)
{
case VK_RETURN:
case VK_ESCAPE:
return TRUE;
break;
default:
break;
}
}
return CDialog::PreTranslateMessage(pMsg);
}
星期四, 4月 10, 2008
星期三, 1月 23, 2008
[VC] 使用技巧
1.如何快速地規範程式碼縮排格式
選中所需要規範的程式碼,按shift+F8
2. 如何在Release狀態下進行調試
Project->Setting=>ProjectSetting對話框,選擇Release狀態。C/C++標籤中的Category選General,Optimizations選Disable(Debug),Debut info選Program Database。在Link標籤中選中Generate debug info復選框。
註:只是一個介乎Debug合Release的中間狀態,所有的ASSERT、VERIFY都不起作用,函數調用方式已經是真正的調用,而不查表,但是這種狀態下QuickWatch、調用隊列跟蹤功能仍然有效,和Debug版一樣。
選中所需要規範的程式碼,按shift+F8
2. 如何在Release狀態下進行調試
Project->Setting=>ProjectSetting對話框,選擇Release狀態。C/C++標籤中的Category選General,Optimizations選Disable(Debug),Debut info選Program Database。在Link標籤中選中Generate debug info復選框。
註:只是一個介乎Debug合Release的中間狀態,所有的ASSERT、VERIFY都不起作用,函數調用方式已經是真正的調用,而不查表,但是這種狀態下QuickWatch、調用隊列跟蹤功能仍然有效,和Debug版一樣。
星期三, 5月 30, 2007
[VC] 快捷鍵整理
Ctrl+O :Open
Ctrl+P :Print
Ctrl+N :New
Ctrl+Shift+F2 :清除所有書籤
F2 :上一個書籤
Shift+F2 :上一個書籤
Alt+F2 :編輯書籤
Ctrl+F2 :添加/刪除一個書籤
F12 :Goto definition
Shift+F12 :Goto reference
Ctrl+P :Print
Ctrl+N :New
Ctrl+Shift+F2 :清除所有書籤
F2 :上一個書籤
Shift+F2 :上一個書籤
Alt+F2 :編輯書籤
Ctrl+F2 :添加/刪除一個書籤
F12 :Goto definition
Shift+F12 :Goto reference
訂閱:
文章 (Atom)