最近都沒有更新博客,是因爲最近在弄win32的窗口程序,而且是公司自己實現的一套接口的win32程序,一是不方便上傳代碼,二是代碼參考價值不大,基本網上都是有的。
今天這個具體的網絡設置界面,我在網上搜索了很久沒有找到,記錄下來,方便自己查看。只講思路不貼代碼了。
Win32程序是基於消息的(message based)、事件驅動的(event driven)。當win32程序運行時,程序不斷檢測外部的觸發(比如單擊按鈕、輸入等),即是否發生事件,這些“輸入”由操作系統捕捉後,以消息的形式進入程序中,然後根據不同的觸發進行不同的處理。因此Win32程序只需完成三件事:
1. 定義窗口外觀
2. 定義不同事件發生時程序如何處理(定義窗口處理函數)
3. 不斷檢測是否有新事件發生,並將其交給相應的處理函數處理
main函數是一般C程序的入口,WinMain是Windows程序的入口。當用戶執行一個程序時,操作系統爲程序分配地址空間,並加載程序,調用入口函數執行程序。
關鍵點在消息和事件;做上層應用只需要熟悉和使用各種消息和事件,並在對應的地方對UI的外觀和內容做修改即可。
1、窗口的基本流程
編寫窗口程序的步驟:
1 定義WinMain函數
2 定義窗口處理函數–自己定義處理消息
3 註冊窗口類(往OS寫入數據)
4 創建窗口 (在內存中創建窗口)
5 顯示窗口(根據內存中對於窗口的描述信息,在顯示器中繪製窗口)
6 消息循環(提取/翻譯/派發)
7 消息處理
具體代碼這裏就不再累述了,網上有很多資料。
2、彈窗的基本流程
1、初始化
DialogBox(ghInst, MAKEINTRESOURCE(IDD_DIALOG1), g_hwnd, (DLGPROC)MyDlgProc)
2、消息處理
BOOL CALLBACK MyDlgProc(HWND hwndDlg, UINT message, WPARAM wParam, LPARAM lParam)
3、退出
EndDialog(hwndDlg, wParam);
3、EditText控件基本認識和使用
win32中可編輯的窗口控件,用於和用戶交互。經常使用在用戶名和密碼的使用上。
SendDlgItemMessage(hWnd, dwCtrlID, WM_SETTEXT, 0, (LPARAM)(LPWSTR)wszTmp);
使用SendDlgItemMessage方法,可以輸入各種格式的字符。ip地址就是一個類似“192.168.1.1”字符串。
EditText控件改變時或產生EN_UPDATE和EN_CHANGE事件,具體有什麼區別請自行查資料。
4、網絡設置界面實現的基本思路
1、使用什麼控件來實現顯示和輸入
使用確定使用EditText控件,來實現顯示和輸入。
2、如何解決格式的問題
2.1、使用SendMessage(GetFocus(), EM_GETSEL, (WPARAM)&nEditStartPos, (LPARAM)&nEditEndPos);方法來獲取光標位置。
2.2、光標跳過ip地址點(.)的位置
3、如何解決ip地址上線的問題
3.1、當EditText控件改變時調用EN_UPDATE,此時我們在這個事件中檢測ip地址是否越界
3.2、如果沒越界,不做操作,修改舊值爲當前設置的值。
3.3、如果越界,修改光標回到上一個位置,設置EditText控件值爲舊值。
5、結束語
基本思路就是這樣子的,就不貼代碼了。