顯示具有 VC 標籤的文章。 顯示所有文章
顯示具有 VC 標籤的文章。 顯示所有文章

星期日, 11月 27, 2011

[MFC] 繪圖時去除閃爍




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 }

星期一, 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。所以加入下面一行程式碼來設定讀入的檔案的地區編碼。

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消息進行缺省處理,而是由我們自己處理,方法如下:

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);
}

星期三, 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版一樣。

星期三, 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