2007年7月27日

增加MFC component到Wince 6.0 Image


##CONTINUE##
在Visual Studio 2005中建立Wince 6.0 OS時,似乎找不到MFC的Component,在Google上搜尋了一下,看起來是要自己將需要的檔案加到OS的Image中!

1.首先,若不知道程式需要用到哪些DLL檔,可以使用 Dependency Walker 確認:



2.利用 CEFileWiz將所需的DLL檔案產生CE 的Component,MFC相關的DLL在安裝Visual Studio2005完後,會放置在C:\Program Files\Microsoft Visual Studio 8\VC\ce\Dll\上!

選好要加入的檔案,並在Component Name填入名稱後,按下Built後就會在WINCE600\PUBLIC下加入新的Component,之後在Catalog Item Window內的Third Party內就可以看見新加入的Component了:)

2007年7月24日

在WinCE桌面上加個程式捷徑

##CONTINUE##
1.產生一個.lnk檔案

產生一個.lnk檔案,例如:MyApp.lnk,檔案內容為

20#"\Windows\MyApp.exe"

其中,20代表#後的字串個數,包含""!

並將.lnk檔放到%_PROJECTOAKROOT%\Files目錄下!

2.在.dat內加入捷徑宣告

在project.dat內加入下面宣告:

Directory("\Windows\Desktop"):-File("DebugZoneAp.lnk", "\Windows\DebugZoneAp.lnk")

3.將.lnk檔增加到ROM Image內

在project.bib之FILE區內加入:

DebugZoneAp.lnk $(_FLATRELEASEDIR)\DebugZoneAp.LNK NK S

2007年7月19日

Something about taskbar and desktop

有關Taskbar設定:
設定Taskbar自動隱藏:在platform.reg中加入
[HKEY_LOCAL_MACHINE\Software\Microsoft\Shell\AutoHide]
"Default"=dword:1

將Taskbar "Always on top"屬性取消:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Shell\OnTop]
"Default"=dword:0
##CONTINUE##
若要將taskbar完全隱藏,可以在程式中加入:
HWND hWnd = NULL;
hWnd = ::FindWindow(_T("HHTaskBar"),NULL);
if(hWnd)
{
::ShowWindow(hWnd,SW_HIDE);
}


有關桌面設定:
設定預設桌布:在platform.reg中加入
[HKEY_CURRENT_USER\ControlPanel\Desktop]
"wallpaper"="\\Windows\\Orangebk.jpg"
記得要將圖片檔在platform.bib中加入

取消我的電腦與垃圾桶圖示:在platform.reg中加入
[HKEY_LOCAL_MACHINE\Explorer\Desktop]
"{000214A0-0000-0000-C000-000000000046}"=-
"{000214A1-0000-0000-C000-000000000046}"=-

2007年7月12日

Dragon Quest Sword

2007年7月11日

Windows CE vs. Windows Mobile

簡單來說,基本上兩者所採用的系統核心是一樣的,不過Windows Mobile是Microsoft公司專門為了市面上常見到的PocketPC或是Smartphone所打造的一套開發環境與授權方式,一般OEM公司如果想要加入生產PocketPC或是Smartphone的行列,就必須與Microsoft特別簽訂相關授權,至於產品的外觀與內含的軟體核心,都是由Microsoft建議,量產之前也必須通過Microsoft的認證,方能掛上Microsoft標籤出售。
##CONTINUE##
至於Windows CE則不限定於PocketPC或是Smartphone的產品,一般公司可以自由運用在許多方面。以這一次Microsoft所展示的相關產品來說,就可以運用在VoIP電話或是網路IP機上盒等多樣產品,一般公司可以自由選擇Windows CE中的套件組合,如果單單選擇只要核心的套件組合,最便宜的核心授權費是3元美金,量產出貨也不一定要通過Microsoft的認證,當然也省了一筆認證所需的費用。如此的彈性組合,已經逐漸讓許多專門做嵌入式系統產品的廠商心動,並且逐漸積極佈局研發。
這兩者的軟體開發環境取得也不一樣,Windows Mobile是在取得Microsoft授權之後,由Microsoft以特別的方式授予。但是Windows CE則是以幾乎免費的方式散佈。因此對於一般公司或是個人工作室來說,取得Windows CE的開發環境與相關技術文件的門檻相對來說是非常低的。
[節錄]"WinCE降低授權門檻 微軟新版OS大舉進攻嵌入式市場"

Block Device Driver vs. Character Device Driver

Device Driver大 致 分 為 Block Device Driver和 Character Device Driver兩 類 。
Block Device Driver是 以 固 定 大 小 長 度 來 傳 送 轉 移 資 料 ; Character Device Driver是 以 不 定 長 度 的 字 元 傳 送 資 料 。
##CONTINUE##
且 所 連 接 的 Devices也 有 所 不 同 , Block Device大 致 是 可 以 隨 機 存 取 (Random Access)資 料 的 設 備 , 如 硬 碟 機 或 光 碟 機 ; 而 Character Device剛 好 相 反 , 依 循 先 後 順 序 存 取 資 料 的 設 備 , 如 印 表 機 、 終 端 機 等 皆 是 。

2007年7月8日

HOW TO:進行對 Windows Form 控制項的安全執行緒呼叫

Windows Form 控制項的存取並非原本就採用安全執行緒的方式。如果您有兩個或多個執行緒管理控制項的狀態,就有可能強制控制項進入不一致的狀態。其他與執行緒有關的錯誤 也有可能如此,包括競爭情形和死結。確定存取控制項是以安全執行緒的方式來進行,是很重要的。
##CONTINUE##
對 Windows Form 控制項進行安全執行緒呼叫
若要對 Windows Form 控制項進行安全執行緒呼叫

1.查詢控制項的 InvokeRequired 屬性。
2.如果 InvokeRequired 傳回 true,就使用對控制項進行實際呼叫的委派 (Delegate) 呼叫 Invoke。
3.如果 InvokeRequired 傳回 false,便直接呼叫控制項。

private void setTextSafeBtn_Click(
object sender,
EventArgs e)
{
this.demoThread =
new Thread(new ThreadStart(this.ThreadProcSafe));

this.demoThread.Start();
}

// This method is executed on the worker thread and makes
// a thread-safe call on the TextBox control.
private void ThreadProcSafe()
{
this.SetText("This text was set safely.");
}
private void SetText(string text)
{
// InvokeRequired required compares the thread ID of the
// calling thread to the thread ID of the creating thread.
// If these threads are different, it returns true.
if (this.textBox1.InvokeRequired)
{
SetTextCallback d = new SetTextCallback(SetText);
this.Invoke(d, new object[] { text });
}
else
{
this.textBox1.Text = text;
}
}
}
資料來源:MSDN