PIXNET Logo登入

H's 手札

跳到主文

My memo

部落格全站分類:數位生活

  • 相簿
  • 部落格
  • 留言
  • 名片
  • 5月 21 週四 200910:07
  • IE8 跟 VS2005、2008衝突...

OMG ...MS在搞啥
 
裝了 IE8 就不能開新專案 ?
參考: Visual C++ Team Blog : Some VS2005 and VS2008 Wizards Pop Up Script Error.
(繼續閱讀...)
文章標籤

huenlil 發表在 痞客邦 留言(0) 人氣(207)

  • 個人分類:Windows Programming
▲top
  • 5月 04 週一 200915:31
  • [轉]PreTranslateMessage()


來源: C++心得分享 ╮(╯_╰)╭: PreTranslateMessage()

前面提到在message loop中 
用GetMessage()來取得message 再用DispatchMessage()來分發message
在這兩個function中間 我們可以照我們的意思來對message做修改
甚至可以在此把message給吃掉 不發出去

在MFC中 這個功能被包在 PreTranslateMessage() 中
每個windows元件(如dialog,button...等)的類別都是繼承自CWnd類別
在CWnd類別中 有個member function叫做PreTranslateMessage()
他會傳入一個MSG的指標 指標的內容便是這個message的資訊
包括 目標元件,message,wParam,lParam
我們可以修改其內容 這便會改變要發出去的message
或者是只要傳回 TRUE 便可以將這個message吃掉
PreTranslateMessage() 的使用方法只要在該元件的類別中改寫他的PreTranslateMessage()即可
範例程式如下


BOOL CMyDlg::PreTranslateMessage(MSG *pMsg)
{
        BOOL rst = CDialog::PreTranslateMessage(pMsg);
        if(pMsg->message == WM_KEYDOWN ||
           pMsg->message == WM_KEYUP    )
        {
                return TRUE;
        }
        return rst;
}



在以上的程式中 會把該CMyDlg中所有 鍵盤按下跟放開的message都吃掉
我們便不會再收到任何鍵盤的message了
要注意的是 不僅僅是dialog會收不到鍵盤message 在這dialog上面的其他window元件也都不會收到
因為任何一個window元件都會受到自己跟他parent 的PreTranslateMessage()影響
我們也可以寫成隻影響特定元件 只需要多判斷個hwnd即可
範例如下


BOOL CMyDlg::PreTranslateMessage(MSG *pMsg)
{
        BOOL rst = CDialog::PreTranslateMessage(pMsg);
        if(pMsg->message == WM_KEYDOWN ||
           pMsg->message == WM_KEYUP    )
        {
                if(pMsg->hwnd == this->m_hWnd)
                return TRUE;
        }
        return rst;
}



如此便只會影響到我們所指定的hwnd
在dialog中有很多元件 我們或許會希望改變特定元件的特性
我們便可以在dialog中的PreTranslateMessage()做完成
(繼續閱讀...)
文章標籤

huenlil 發表在 痞客邦 留言(0) 人氣(1,836)

  • 個人分類:Windows Programming
▲top
  • 4月 23 週四 200910:51
  • [轉]Win32 Timer範例


win32 Timer範例
 
(繼續閱讀...)
文章標籤

huenlil 發表在 痞客邦 留言(0) 人氣(1,895)

  • 個人分類:Windows Programming
▲top
  • 3月 11 週三 200910:52
  • [轉]AP launch flow in WinCE

來源: 如何disable taskbar
 
Elay: 節錄重點討論,翻譯、整理部分語句。
(繼續閱讀...)
文章標籤

huenlil 發表在 痞客邦 留言(0) 人氣(1,281)

  • 個人分類:Windows Programming
▲top
  • 3月 10 週二 200921:06
  • [轉]撰寫Windows Mobile 截圖程式(含熱鍵設定)

Screenshot of Mobile Capture application來源: 30 Days of Windows Mobile - Day 05: Mobile Capture

30 Days of Windows Mobile - Day 05: Mobile Capture
(繼續閱讀...)
文章標籤

huenlil 發表在 痞客邦 留言(0) 人氣(1,076)

  • 個人分類:Windows Programming
▲top
  • 3月 08 週日 200920:17
  • [轉]WinCE 錯誤中斷(Data Abort、Raise Exception、Prefetch abort)

Elay: 參考來源文章,整理出快速參考的簡單版,但是每篇原文都很有用。
 
當Windows Mobile產生錯誤時,有三種常見錯誤,格式如下:
(繼續閱讀...)
文章標籤

huenlil 發表在 痞客邦 留言(0) 人氣(5,154)

  • 個人分類:Windows Programming
▲top
  • 3月 07 週六 200915:11
  • [轉]跟蹤視窗和使用GDI

遊戲編程起源(初學者)Ⅴ - GameRes.com

☆ 設備上下文
在第一章裡,我們創建和註冊了一個窗口類,其中有一行定義了窗口的風格(功能),是這個樣子:

sampleClass.style = CS_DBLCLKS | CS_OWNDC |
CS_HREDRAW | CS_VREDRAW; // standard settings


其中三個屬性是很一般的,但這個——CS_OWNDC,需要解釋一下。如果你記得,我曾經告訴過你這個屬性允許窗口有自己獨特的設備上下文,但直到現在,我們還沒有具體的講,OK,時間到了,開講!
設備上下文是一個結構,是一個表現一組圖形對象和屬性的結構,還有一些輸出設備的設置和屬性。使用設備上下文允許你直接操縱圖形,不用考慮低級細節。
Windows
GDI是一個圖形翻譯系統,是介於應用程序和圖形硬體之間的一層。GDI可以輸出到任意的兼容設備,不過最常使用的設備是視頻監視器、圖形硬拷貝設備(如
打印機或繪圖儀),或者是內存中的圖元文本。GDI函數能夠繪製直線、曲線、封閉的圖形和文本。所有訪問GDI的Windows函數都需要一個設備上下文
句柄作為參數。感謝上帝,這是非常容易做到的。你若想得到一個窗口的設備上下文句柄,你可以用這個函數:

HDC GetDC(
   
HWND hWnd  // handle to a window
);


很簡單,是不是?所有你做的是,把要操作的窗口的句柄傳遞給它,然後返回一個設備上下文句柄。如果你傳遞的是NULL,將返回整個螢幕的設備上下文(DC,以後都用DC表示)句柄。如果函數呼叫失敗,將返回NULL。
設備上下文不僅僅處理圖形,但我們習慣於泛泛的認為它是處理圖形的。處理顯示圖形的DC類型,稱作顯示DC,處理打印的,稱作打印DC;處理位圖數據的,
稱作內存DC,還有其它一些設備DC。感覺有點複雜吧,不要緊,這是Windows,它的主要功能就是迷惑群眾。^_^一旦我們接觸一些代碼,就不會覺得
難了。
當你結束使用DC時,一定要釋放它,也就是釋放它佔用的內存空間。要把這種思想貫穿到以後的編程中去,佔用了內存,不用時要釋放,切記!釋放DC是一個很簡單的函數:

int ReleaseDC(
   
HWND hWnd, // handle to window
   
HDC hDC    // handle to device context
);


若成功釋放,返回值是1,否則是0。參數有註釋,我還是說一下:
※ HWND hWnd:你所要控制的那個窗口的句柄。如果你開始傳遞的是NULL,現在還要傳遞NULL。
※ HDC hDC:DC的句柄。
在用DC和GDI進行圖形顯示前,我們先看看創建窗口實例時要遇到的幾條重要的消息。我將要提到的四條消息是:WM_MOVE、WM_SIZE、WM_ACTIVATE、WM_PAINT。

☆ 追蹤窗口狀態
頭兩個是很簡單的。當窗口被用戶移動時將發送WM_MOVE消息,窗口新位置的坐標儲存在lparam中。(還記得嗎,消息在lparam和wparam
中被進一步描述,它們是消息控制函數的參數)lparam的低端字中存儲窗口客戶區左上角的坐標x,高端字中存儲坐標y。
當窗口的大小被改變時,將發送WM_SIZE消息。同WM_MOVE消息差不多,lparam的低端字中存儲客戶區的寬度,高端字存儲高度。同WM_MOVE不同的是,wparam參數也控制了一些重要的東西。它可以是下列中任意一個值:
※ SIZE_MAXHIDE:其它的窗口被最大化了。
※ SIZE_MAXIMIZED:本窗口被最大化了。
※ SIZE_MAXSHOW:其它的窗口被還原了。
※ SIZE_MINIMIZED:本窗口被最小化了。
※ SIZE_RESTORED:窗口被改變了尺寸,但既沒最大化,也沒有最小化。
當我編寫窗口實例時,我通常喜歡把窗口的當前位置和大小保留在幾個全局變量裡。假設我們命名這些全局變量為xPos,yPos,xSize和ySize,你最好這樣控制WM_SIZE和WM_MOVE這兩個消息:

if (msg == WM_SIZE){
   
xSize = LOWORD(lparam);
   
ySize = HIWORD(lparam);
}
if (msg == WM_MOVE){
   
xPos = LOWORD(lparam);
   
yPos = HIWORD(lparam);
}


現在輪到WM_ACTIVATE消息了。它告訴你一個新窗口被激活。這是很有用的,因為如果出現優先的申請,你就不可能處理程序裡的所有邏輯。有時,例如
寫一個全屏的DIRECTX程序,忽略WM_ACTIVATE消息將導致你的程序出現致命的錯誤,可能它做了一些你不希望它做的事情。在任何情況下,守候
WM_ACTIVATE消息從而採取行動,是一個好主意。
窗口被激活和被解除激活都會發出WM_ACTIVATE消息,我們可以通過檢測wparam的低端字來得知是被激活還是被取消。這將有三種可能的值:
※ WA_CLICKACTIVE:窗口被游標激活。
※ WA_ACTIVE:窗口被其它東西激活。(鍵盤、函數呼叫、等等)
※ WA_INACTIVE:窗口被解除激活。
為了處理這個消息,我保留了另一個全局變量bFocus,當接收到WM_ACTIVATE消息,它的值將改變。示例如下:

if (msg == WM_ACTIVATE){
   
if (LOWORD(wparam) == WA_INACTIVE){
       
focus = FALSE;
   }else{
       
focus = TRUE;
(繼續閱讀...)
文章標籤

huenlil 發表在 痞客邦 留言(0) 人氣(1,671)

  • 個人分類:Windows Programming
▲top
  • 3月 05 週四 200910:06
  • [轉]VS Link error LNK2001

 學習VC++時經常會遇到鏈接錯誤LNK2001,該錯誤非常討厭,因為對於編程者來說,最好改的錯誤莫過於編譯錯誤,而一般說來發生連接錯誤
時,編譯都已通過。產生連接錯誤的原因非常多,尤其LNK2001錯誤,常常使人不明其所以然。如果不深入地學習和理解VC++,要想改正連接錯誤
LNK2001非常困難。
  初學者在學習VC++的過程中,遇到的LNK2001錯誤的錯誤消息主要為:
(繼續閱讀...)
文章標籤

huenlil 發表在 痞客邦 留言(0) 人氣(15,575)

  • 個人分類:Windows Programming
▲top
  • 3月 05 週四 200910:03
  • [轉]VC文件格式

.opt 工程關於開發環境的參數文件。如工具條位置等信息;
.aps (AppStudio File),資源輔助文件,二進制格式,一般不用去管他.
.clw ClassWizard信息文件,實際上是INI文件的格式,有興趣可以研究一下.有時候ClassWizard出問題,手工修改CLW文件可以解決.如果此文件不存在的話,每次用ClassWizard的時候繪提示你是否重建.
.dsp (DeveloperStudio Project):項目文件,文本格式,不過不熟悉的話不要手工修改
.dsw(DeveloperStudio Workspace)是工作區文件,其他特點和DSP差不多.
.plg 是編譯信息文件,編譯時的error和warning信息文件(實際上是一個html文件),一般用處不大.在Tools->Options裡面有個選項可以控制這個文件的生成.
.hpj (Help Project)是生成幫助文件的工程,用microsfot Help Compiler可以處理.
.mdp (Microsoft DevStudio Project)是舊版本的項目文件,如果要打開此文件的話,會提示你是否轉換成新的DSP格式.
.bsc 是用於瀏覽項目信息的,如果用Source Brower的話就必須有這個文件.如果不用這個功能的話,可以在Project Options裡面去掉Generate Browse Info File,可以加快編譯速度.
.map 是執行文件的映像信息紀錄文件,除非對系統底層非常熟悉,這個文件一般用不著.
.pch (Pre-Compiled File)是預編譯文件,可以加快編譯速度,但是文件非常大.
.pdb (Program Database)記錄了程序有關的一些數據和調試信息,在調試的時候可能有用.
.exp 只有在編譯DLL的時候才會生成,記錄了DLL文件中的一些信息.一般也沒什麼用. +.ncb 無編譯瀏覽文件(no compile browser)。當自動完成功能出問題時可以刪除此文件。build後會自動生成。
(繼續閱讀...)
文章標籤

huenlil 發表在 痞客邦 留言(0) 人氣(465)

  • 個人分類:Windows Programming
▲top
  • 1月 12 週一 200913:53
  • [轉]Windows Kernel 學習筆記之十九 - DLL

來源: Mars
 

介紹一點重要的背景知識:
(繼續閱讀...)
文章標籤

huenlil 發表在 痞客邦 留言(1) 人氣(10,316)

  • 個人分類:Windows Programming
▲top
1

近期文章

  • 資訊產業、專案管理常用術語
  • Build Android on Ubuntu 11.10
  • Android device kernel source code git list
  • Android Vold (Volume Daemon)
  • Android adb tool 功能整理
  • Android init language Tips
  • MTP (Media Transfer Protocol) on Android
  • [轉] Interactive map of Linux kernel
  • [整理] Galaxy S / Nexus S 硬體
  • [整理] Linux file system & eMMC

文章搜尋

文章分類

toggle Android (2)
  • Android (34)
  • Android AP (8)
toggle Linux (1)
  • Linux Kernel & driver (28)
toggle Programming (3)
  • Tools (9)
  • Windows Programming (10)
  • C++ (5)
toggle 技術 (3)
  • 專案管理 (1)
  • Misc (3)
  • 硬體 (3)
toggle 閱讀與聆聽、觀賞與體會 (3)
  • 第八藝術 (2)
  • 遊戲 (1)
  • Music (3)
toggle 雜記 (3)
  • Notes (17)
  • 旅行 (1)
  • 知識- (1)
  • 未分類文章 (1)

參觀人氣

  • 本日人氣:
  • 累積人氣: