最近都没有更新博客,是因为最近在弄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、结束语
基本思路就是这样子的,就不贴代码了。