2010年12月23日 星期四

使用 WebView

最近因為一個案子需要和其他單位合作,
要從我所撰寫的 App 中某個按鍵開啟他們的網頁,
由於是網頁,就要在 Activity 中嵌入一個可以瀏灠網頁的 View
在 Android 上就是使用 WebView 這個類別, Library 在這個位置

2010年12月22日 星期三

獲得 Zune 相關資訊

前幾天送審 Windows Phone 時被退件,原因是我們的 App 在開啟後會播放背景歌曲,
而當在 Zune 播放背景歌曲時,我們再使用 MediaPlayer 播放歌曲就會很自然的將背景歌曲停止,
微軟的審核人員可能覺得這樣會讓用戶以為 Zune Crash 之類的,所以強制規定此項目

2010年12月21日 星期二

Android Multi Thread 的簡單範例

撰寫 Desktop Software 時,不使用 Thread 可能會失去不少的靈活性與流暢感,
在 Android 中使用 Thread 的觀念與 C# 中的 BackgroundWorker 很像,
大致上就分成這四個成員

2010年12月13日 星期一

取得螢幕 DPI 設定值

在寫 Windows 視窗軟體時,顯示文字資訊有幾項方法,
第一就是使用控制項例如 Static Text、Edit Control 等顯示文字訊息,
另一種很常用的就是將文字利用 DC.DrawText() 等方式畫在視窗上。

2010年12月12日 星期日

free Swatch

分享一個自製小工具…取名叫 WinSwatch…
設計 UI+畫圖+寫 Code 總共花了我 5 個小時…囧…
使用方法就如這張圖…有需要的請服用嘍…

2010年12月9日 星期四

預設虛擬鍵盤

在手持式裝置上不免會利用虛擬鍵盤輸入些資訊,
個人最討厭在輸入網址與Email時要時常切換到符號表選 @ 或 / 之類的符號,

2010年12月3日 星期五

Windows Phone 如何在 Screen Locked 環境運行

前幾天在開發中的 Windows Phone 專案上新增了一個功能,
大概就是啟動一個 Thread 定時檢查網路上的資訊,若雲端的檔案被更新就抓下來,

2010年12月2日 星期四

forward declaration

一個小技巧,說真的,在我得知這個技巧時還蠻驚訝的 :P
驚訝之餘也感嘆自己見識太少與能力不足,
竟然有如此巧妙的技巧可以取代我一直覺得理所當然的事,

2010年12月1日 星期三

如何獲得 Theme Property

Windows Phone 提供兩種背景風格讓用戶選擇,闇系與光系,
當然在調整了 Theme Background 後,預設的文字色彩也會變成該背景的對比色,

2010年11月30日 星期二

離開 Page 時保存資料的方法

在 Charles Petzold 的 Windows Phone 7 電子書中有提到下面幾點

How to get App Version in WMAppManifest.xml

開發WP7軟體時,版號通常會統一管理在 WMAppManifest.xml 中,
而某些情況時常要讀出版號做某些判斷或秀在 "about" 之類的畫面上,
就目前知道的有三種方法可以取得 Version 此屬性值。

2010年11月26日 星期五

IsolatedStorage

據說這是從 Silverlight 2.0 開始有的東東,
剛查到這個東西時感覺和 Android 的觀念很像,
只有建立它的那個App可以存取自己 Isolated Storage 裡的資料,

2010年11月16日 星期二

我以為的軟體工程師九層分級架構

工作至今也兩年半了,待過四個地方做過幾種不同角色的編程員,
今天就來談談我所觀察到的本省軟體工程師並簡單的分級,

我並不以自己身為 "軟體程序員" 為榮,
僅是因為我只待過這個產業所以拿出來講,
若有什麼得罪請見諒,勿戰。

從人的屬性為區格,我簡單的將我所知道的 "純軟" 工程師分為九種角色

2010年11月14日 星期日

FindWindow 與 GetWindow


HWND WINAPI FindWindow(
  __in_opt LPCTSTR lpClassName,
  __in_opt LPCTSTR lpWindowName
);


這是一個 Windows API,用於找出某個視窗…
回傳值 HWND 為該視窗的 handle,若查無此視窗則回傳0
前幾天檢查 Code 發現自己用錯了,所以記一下…

2010年11月13日 星期六

WP7 中如何實作硬體的 Back 鍵功能…

其實在軟體中放一個 Back 鍵感覺是個還蠻雞肋的功能…
但基於某些理由…這是必要且有助於軟體操作流程的…

2010年11月4日 星期四

htc Phone Hard Reset

有時手機不知怎麼的無法開機亦無法關機,拔電池重開一樣卡住…
在這種沒辦法做事的情況下只有做 Hard Reset 試試了…

2010年11月2日 星期二

Windows Phone 加入 ApplicationBar

剛拿到 Windows Phone 時最不習慣的其實是其 Menu 的 Style
因為 Windows Phone 硬體往往只有三顆鍵

Back、Home、Bing Search

Windows Phone 用圖要領

開發 Windows Phone 7 專案往往必須改變軟體開啟時的 Splash 與 Logo
而更改 Splash、Logo、Background 的方式就是修改專案中附的這幾個檔案

2010年11月1日 星期一

Android 開發環境建置

最近換了新的 OS,理所當然平常常用的開發環境也要重建,
此次在裝 Android 開發環境時發現有些小調整,也順便記錄一下好了,

2010年10月30日 星期六

Windows Phone 開發環境建置

最近正開始接觸 Windows Phone 7 程式開發,
說真的還蠻幸運的,目前實機取得似乎很不容易呀,

2010年10月19日 星期二

使用 alloca 或 malloc?

偶爾我們需要使用 malloc 或 realloc 來配置固定大小的記憶體空間,
使用上使用了這類指令,都要配上等量的 free() 或 delete 來釋放記憶體,
以免造成 memory leak 的狀況,當然也可以使用免 free() 的 alloca 指令。

error BK1513 缺少 xxx.sbr 的問題

開了很久沒開的一個專案想 Build 一個測試版本到新環境跑跑看,
結果卻發生缺少 xxx.sbr 的問題,檢查了許多設定都沒做錯,

2010年10月16日 星期六

Visual Studio 自動填入無作用與中斷點行數不一致的問題

在使用 Visual Studio 開發 C++ 專案時,有時寫了新類別時,
或是為了主專案的簡潔性而調整了檔案的位置至新開的專案時,
常常會造成自動填入功能失效,確定正確的類別,但按了 "." 或 "->" 卻沒東西跑出來,
當使用多個參數的 function 時少了自動填入的功能還頗令人苦惱,

2010年10月13日 星期三

在 Android 使用 Timer

有時必須用到簡單的計時排程功能,
以下兩個小範例示範實作 1000 毫秒的 Timer,
兩種方式需注意一點,使用 Timer 方式雖然簡單,
但 TimerTask 是在 Background Thread 被呼叫,
所以無法在 TimerTask 中直接操作 UI Element,
必須委托 main thread 的 handler 協助,

如何獲得 Android 裝置的電源管理資訊

若有需要,可以利用 android.os.BatteryManager 來獲得電源資訊,
方法和獲得連線、記憶卡資訊一樣,用收廣播的方式來獲得資訊,
以下是個小範例。

Android 使用 TCP 連線讀取資訊

簡單的 TCP 連線小範例,測試結果發現,TCP 連線真的很耗電的說。

2010年10月7日 星期四

為何 Windows Mobile 專案在 Visual Studio 下中斷點無反應

有時拿到新的 Windows Mobile 裝置時,
已經與 PC 做 ActiveSync 動作,部屬程式也可執行,
但下了某一行中斷點 (Break Point) 卻沒停在該停的地方,

Eclipse 偵測不到 Android 裝置或找不到 xxx.apk 問題

有時拿到新的 Android 裝置時,Eclipse 會偵測不到 USB 上的裝置,
導致無法在實機上執行程式的情況,
大概比較一下 "已經能被 Eclipse 辨識的裝置" 和 "無法辨識到的裝置" 這兩者的設定
發現只要在主畫面按下 Menu 進到 Setting/Application/Development 裡面,

2010年10月4日 星期一

Windows Mobile 上部屬 dll 發生佔用的情況

在撰寫 Windows Mobile 的軟體時,
利用 Visual Studio 將專案部屬到機器上應該是必做的一件工作,
有時後我們會將特定的 class、function、resource 等做成額外的 dll
好讓我們能夠在不動到主程式的情況下做到快速加入新功能或換圖等需求。

2010年10月2日 星期六

Android 上的 Permissions

在撰寫 Android App 時,時常需要調用一些平台上的資訊,
例如使用 TelephonyManager 查詢 IEMI CODE 等需求,
就以取得 IMEI 為例,在 Android 中是使用 getDeviceId() 這個 API

2010年10月1日 星期五

不使用 temp 變數交換兩個整數

在交換兩個整數時往往需要一個暫存變數,舉例如下。

mouse leave 與 mouse event track

在 C++/MFC 中雖然有 MouseLeave 的事件可以選擇,
但選了卻沒有反應,原因是必須加上 Track 追蹤滑鼠,
以下是在 MFC 上實作 Mouse Leave 和 Mouse Over 的簡單範例。

2010年9月29日 星期三

為什麼使用 BOOL 而非 bool

這是我剛接觸用 C++/MFC 開發時看到的第一個疑惑,
在 platform SDK/include/windef.h 裡面有一行這樣的定義

2010年9月28日 星期二

如何獲得 GetLastError() 的文字訊息

在撰寫軟體時常常會接獲錯誤訊息,或在操作某些動作時發現錯誤,
也經常利用 ::GetLastError(); 這支 Windows API 來獲取錯誤代碼,
但是這支API回報的是 DWORD 型態,想知道得更詳細往往要再上網搜尋一番,
當然也有方法可以取得文字訊息,簡單的範例如下。

快速的判斷整數是否為奇數

從這裡看到的方法,覺得相當不錯所以留作備份一下。

CString 與常用型態互轉

因為 C++ 的型態太多了,沒有常用真的會忘記,記下來,
但由於真的太多了,並不是很完整,之後有碰到會再補上來。

利用 memory dc 解決畫面閃爍問題

重繪時要避免畫面閃爍可以使用 Invalidate(FALSE);
使重繪時不做清除底圖的動作,減少閃爍的情況,

2010年9月27日 星期一

利用 SetWindowRgn 製作非矩型視窗

在 XP 預設的外觀樣式下,正常的視窗或對話框是上方頂點圓圓的配下方直角,
若有需要做出非預設樣式的視窗時,可以利用 CWnd::SetWindowRgn() 這個 function
這可以用來指定視窗的全部範圍與型狀,
在型狀之外的部份會自動為我們加上背景的遮罩。

client area 與 WM_NCHITTEST

在 MFC 中若要製作不同於 Windows 風格的視窗時,
往往會將 Dialog 的 Border 屬性設為 None,
然後利用自己畫背景的方式製作美美的視窗、對話框。

2010年9月24日 星期五

Invalidate function 的注意事項

MFC 的 CWnd 中有個 member function 叫作 Invalidate();

使用 ISAXContentHandler 解讀 XML 的注意事項

在 C++ 底下要解讀 XML 檔案常用的有兩個方法,一是使用 IE6 就有附加的 CLSID_DOMDocument30 元件,二是使用較底層的 Windows API ISAXContentHandler,兩都都需要 include msxml2.h 檔案

2010年9月23日 星期四

Java 的 method 參數

最早之前工作是寫 C# 與 VB.Net,後來轉寫 C++ 以後很習慣清楚的標示 function 參數是傳值、傳址或傳參考,最近寫起 Java 發現 Java 和 C# 對於 method 參數是傳值還是傳參考是差不多的觀念,參數簡單的分為兩類

2010年9月16日 星期四

Android Activity 的啟動與結束

撰寫 Android 專案時發生一些在離開應用程式時 crash 的狀況,反覆檢查 Activity 的 onDestroy() 就是看不出什麼異樣,後來 TRACE 才發現問題出在 onPause() 裡面的一行 code,在此筆記一下 Activity 啟動與結束的流程

2010年9月12日 星期日

多核與多緒…

很久前曾經看過一篇文章提供 CPU 多核的發展目的,有興趣可以參考這裡,底下還有中文翻譯,相當詳細

2010年9月11日 星期六

vector 內要放值還是放址?

vector 是 STL 其中之一非常好用的容器,用來替代1維的陣列管理物件是很常用的寫法,有一陣子我在看公司前輩寫的 code 發現一個怪怪的地方,那是一個跑在 Windows Mobile 平台的軟體,裡面有一些大概就是這樣子的一段 code

2010年9月10日 星期五

CFile 的注意事項

以下是我在使用 CFile 時曾經發生不順利的地方,雖然網路上查 CFile 的個類方法太方便了,但還是記下來備忘。

2010年9月9日 星期四

protected 繼承的使用時機

在此篇中有提到 private 繼承的重點

http://ascii-iicsa.blogspot.com/2010/09/is-ahas.html

軟體缺少 d3dx9_xx.dll 的問題

DirectX 在版本轉換時真的是個麻煩的東西,曾經發生一個狀況,將原本正常的專案由 VS2003 轉至 2008 以後,原本利用 VS2003 包出來正常的檔案,改用 VS2008 編以後自已用起來正常,給其他人用卻出問題,在其他台執行時跳出缺少 d3dx9_41.dll 的錯誤。

2010年9月7日 星期二

2010年9月6日 星期一

has-a 的 private 繼承觀念

以下這段程式使用了 public 繼承表示一種 is-a 的關係,吉娃娃繼承了狗,所以吉娃娃是狗的一種。

單一繼承的種類

從事編程的工作也有兩年多了,類別繼承 10 次有 9 次是使用公用繼承,也就是使用 public 關鍵字的繼承,原因無他,純粹是因為 public 繼承最方便。

2010年8月30日 星期一

繼承與物件建構、解構注意事項

繼承時有幾點重要的注意事項,例如建構、解構的順序、方式、動態記憶體配置等都是需要注意的地方。

pure virtual function 與 abstract base class

有些時後會發生一種情況,我們必須創立許多類似的類別,而這些類別必須有某些相同且必要的條件,同樣以遊戲為例,例如資深工程師制訂了 NPC 的規格,各工程師照著規格實作遊戲企劃人員構想的各種 NPC 這種情況可以用到 virtual function 來解決各衍生類別的同名異式,但無法要求衍生類別一定要實作某些類別的內容,這時可以利用 "pure virtual function(純虛擬函式)" 例如:

2010年8月25日 星期三

polymorphic 與 virtual關鍵字

物件導向設計中有一項精華就是 polymorphic(同名異式),以 MFC 為例,每個元件其實最底層都是 CWnd (視窗),CButton 與 CEdit都繼承了 CWnd,兩都也都有 SetWindowText(),但 CButton 會顯示在按鍵的中間,CEdit 會顯示在框框中,這就是 polymorphic 的表現。

2010年8月20日 星期五

類別的靜態成員與自建簡易函式庫

有時後我們常常會寫一些 function,這些 function 在寫不同專案時常常要 copy 過去,若這些 function 與流程無關,或是可以把相關的值提取出來做為參數,那何不設計成一個自己使用的程式庫類別咧,

Class Default Constructor

假設有個類別T


class T
{
};
main()
{
  T tObj;
  T *tObj = new T;
  T tObj = T();
}

template 樣板函式

若我們要寫一個交換兩個值的 function,可能吃整數、浮點數、字串、該怎麼辦呢?最簡單的方法就是用 overloading 寫好幾個,另一種方法就是寫樣板函式請前置處理器幫忙。

Inline function、Marco

function 這種東西很好用,但呼叫 function 時都是有成本的,例如

不定參數的 function 宣告方法

有時我們要做一些動作,參數是不固定的,例如取一堆整數的最大值

function 的陣列參數

C++ 設計 function 時,若參數有陣列一般是這樣宣告的,

enum 的用途

enum 可以用來定義常數,翻譯作 "列舉"

structure 的眉角

從某些方面來看,struct 與class 真的很像,以下是宣告方式

Escape Sequence Codes

一些常用的 Escape Control

2010年8月19日 星期四

operator overloading

operator 即是運算子,在利用 C++ 編寫程式時,operator overloading 是很常用到的,例如果我們自己實作了一個類別,一個漂亮的 ComboBox,我們可以在這個 CComboBox 中加入一條函式

const 與 volatile 修飾字

const 即是常數,即是宣當時賦值後只能讀取,無法改寫的數,很多初學者只知道這可以宣告無法改變的變數,但又莫名奇妙不知道實質的意義,不要改變這種事不就自己知道就好了嗎?為什麼要刻意在前面加上 const 來修飾呢?小的之前的想法就是這樣,讀的書多了才發現真正的用處在哪。

2010年8月18日 星期三

CString.ReverseFind() 與 Find() 的區別

CString 類別中有一些好用的 Method,有一個名為 Find() 的 Method 即是其中一個,此函式會回傳找到參數的索引位置,索引以 0 開始計算,若沒找到就會回傳 -1

利用 Event 定時處理某些事情

在軟體流程中,常常需要在固定一段時間後去做某件事,例如股市看盤軟體,每1分鐘要更新一次走勢圖,包括交易量、成交金額等資訊,初心者經常會使用 SetTimer() 來做這種事,但 SetTimer 這種事只存在於視窗中,例如 CWnd、CDialog 等等視窗。

2010年8月17日 星期二

Thread 常用的同步方式

有時後我們會使用 Thread 來在背景做一些事,僅僅是為了不讓畫面被 main thread 卡住,若我們需要等待 thread 做完事才處理接下來的動作,可以使用以下 Windows API

Multi Thread 下的 function 設計條件

在開發 Multi Thread 的軟體時,所有可能被 Thread 呼叫的 function 都要盡量設計成 Reentrant,這可以提供最安全的執行環境與結果。

Singleton 的 C++ 範例

Singleton 翻譯作 "獨身" 對於取代全域物件,Singleton 是個安全又方便的方法。

Multi Thread 的小範例

經常會寫到 Multi Thread 的程式,卻常常要回頭翻以前寫的 Code 查語法,大概是不夠熟吧,所以這裡也筆記一下。

專案轉換常發生的 qedit.h 編譯問題

有時新的 IDE 工具上市時,為了配合某些流程,必須將舊的開發環境轉至新的開發環境,又或網路上下載了 VS2003 的範例,苦於自己只有 VS2005 而必須轉換,這種狀況就常常遇到一些前置處理器與編譯的惱人錯誤…

使用 DXSDK 發生的 __ptr64 編譯問題

有時後編譯 DirectShow Sample 中的 BaseClasses 時會出現__ptr64相關的錯誤訊息,使用此 Project 有兩種方式,第一是直接 Include 完整的 Sample 目錄,例如 C:\DXSDK\Samples\C++\DirectShow\BaseClasses

2010年8月16日 星期一

最佳化對 Singleton 的影響

取代全域物件,使用 Singleton 是個不錯的觀念,但在 Singleton 的類別經常伴隨著一個 member function 叫作

Multi Thread 常用的安全控制

Thread 有至少 3 種狀態供我們利用,分別為
1. Running - 正在佔用CPU執行中
2. Ready - 可立即執行的狀態,但CPU仍被佔用
3. Waiting - 等待事件

2010年8月15日 星期日

學習中…

只是拿來做一些個人筆記…好讓自己在各處都可以查到曾經整理過的資料…若您正好需要這裡的某些資料…註明出處後就直接取走吧…

筆記內容大部份都是關於寫作客戶端程式的一些經驗或其他地方看到的知識…內容不一定是完全正確的…而是我所理解的認知…若發現有誤請您指教…小的會非常感激…