• 1. Windows程序设计基础
  • 2. 第五章 用户界面设计5.1 基础知识 对话框与子窗口控件 使用对话框和控件与用户交互
  • 3. 对话框与子窗口控件 ::CreateWindowEx(0, “button”, “push button”, WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,50, 30, 110, 30, m_hWnd, (HMENU)IDC_BUTTON, AfxGetApp()->m_hInstance, NULL); Button窗口类是模块User32.dll被加载到进程中时注册。 控件以WM_COMMAND消息的方式向它的父窗口发送通知消息。通知消息的种类随着控件的不同而可能不同。但每种情况下,消息的wParam和lParam参数包含的信息指定了发送消息的控件和促使消息发送的动作。
  • 4. 预定义的窗口类控件类型类名描述按钮(Buttons)BUTTON用户可以点击向程序提供输入的子窗口列表框(List Box)LISTBOX提供一个可供选择的列表文本框(Edit controls)EDIT通常用于编辑文本组合框(Combo boxes)COMBOBOX由一个列表框和一个编辑控件组合而成滚动条(Scroll bars)SCROLLBAR用于显示比窗口客户区大的数据对象静态文本框(Static Text)STATIC用于显示静态文本信息
  • 5. 对话框工作原理对话框是应用程序创建的用来接收用户输入的临时窗口。 对话框通常包含多个子窗口控件,通过这些控件,用户输入文本,选择选项或发布命令。 对话框种类: 模态:模态对话框创建以后,在用户关闭此对话框之前,系统不允许切换到同一线程的其他窗口。 非模态:模态对话框可以在程序的窗口间任意切换。非模式对话框从WinMain函数的消息循环中接收输入。
  • 6. 对话框工作原理同子窗口控件类似,对话框的窗口函数也由User32.dll提供,所以在创建对话框之前不需要注册窗口类。且创建对话框时不需要调用CreateWindowEx函数,而是调用DialogBoxParam或CreateDialogBox函数。两个函数都在内部调用了CreateWindowEx函数,使用的风格、大小和位置等参数都取自资源中定义的对话框模板。
  • 7. int DialogBoxParam ( HINSTANCE hlnstance,// 实例句柄 LPCTSTR IpTemplateName, // 对话框资源ID号 HWND hWndParent, // 父窗口句柄 DLGPROC IPDialogFunc, // 消息处理函数 LPARAM dwlnitParam); // 对话框初始化的值,在WM_INITDIALOG 消息的//lParam参数中取出 销毁对话框:EndDialog函数从对话框创建模式对话框函数
  • 8. int CreateDialog (HINSTANCE hlnstance,// 实例句柄 LPCTSTR IpTemplateName, // 对话框资源ID号 HWND hWndParent, // 父窗口句柄 DLGPROC IPDialogFunc // 消息处理函数 ); 销毁对话框:DestroyDialog函数 从对话框创建非模式对话框函数
  • 9. 5.2 使用对话框和控件与用户交互几个函数: //设置标题栏的图标 SendMessage(hDlg,WM_SETICON,ICON_BIG,(long)g_hIcon); // 设置SS_BITMAP风格 LONG nStyle = ::GetWindowLong(hWndBmp, GWL_STYLE); ::SetWindowLong(hWndBmp, GWL_STYLE, nStyle | SS_BITMAP); HWND GetDlgItem(HWND hDlg,int nIDDlgItem);//取得指定对话框中一个控件的句柄。 int GetDlgCtrlID(HWND hwndCtl);//取得控件的ID号 LRESULT SendDlgItemMessage(HWND hDlg,int nIDDlgItem,UINT Msg,WPARAM wParam,LPARAM lParam);//向指定控件发消息
  • 10. // 初始化复选框 ::CheckDlgButton(hDlg, IDC_BMP1, BST_CHECKED); //判断单选框或复选框是否被选中 ::IsDlgButtonChecked(hDlg, IDC_BMP1);//返回值3种 BST_CHECKED(选中)、BST_INDETERMINATE(灰化)、 BST_UNCHECKED(未选中)
  • 11. // 向列表框控件中添加文本 ::SendDlgItemMessage(hDlg, IDC_LIST, LB_ADDSTRING, NULL, (long)szText); 消息: (列表框风格LBS_SORT) LB_ADDSTRING(增)、 LB_INSERTSTRING(插)、 LB_DELETESTRING(删)、 LB_RESETCONTENT(删除所有)、 LB_GETCOUNT(总数)、 LB_GETCURSEL(当前选中项) // 为静态文本框设置背景色 ::SetBkColor(hdc, RGB(0xa6, 0xca, 0xf0)); //设置文本颜色 ::SetTextColor(hdc, RGB(0, 0, 0xff));
  • 12. 5.3 通用控件通用控件:状态栏、工具栏、列表视图、树形视图、进度条、滚动条等,它们都是增强型子窗口控件。全部装载到内存中非常浪费资源,所以一般不加载。 Richedit控件有自己的DLL—Riched20.dll,其余控件的可执行代码都放在comctl32.dll库中。 在应用程序中加载comctl32.dll库的函数是InitCommonControls,它也是comctl32.dll中的函数。声明在comctl.h头文件中。 Richedit控件需要显式使用LoadLibrary函数加载Riched20.dll库。
  • 13. 创建通用控件的方法使用资源编辑器 代码创建,CreateWindowEx函数,传递相应类名即可。 函数原型:HWND CreateWindowEx(DWORD dwExStle,LPCTSTR IpClassName,LPCTSTR lpWindowName,DWORD dwStyle,int x,int y,int nWidth,int nHeight,HWND hWndParent,HMENUhMenu,HANDLE hlnstance,LPVOIDlpParam); 通用控件类名: ToolbarWindow32---工具栏 tooltips_class32---提示文本 msctls_statusbar32---状态栏
  • 14. SysTreeView32---树形视图 SysListView32---列表视图 SysAnimate32---动画 SysHeader32---标题栏 msctls_hotkey32---热键 msctls_progress32---进度条 msctlsupdown32---滚动条 SysTabControl32---项目列表
  • 15. 一些通用控件的特殊创建函数CreateToolbarEx 创建工具栏 CreateStatusWindow 创建状态栏 CreatePropertySheetPage 创建属性页 PropertySheet 创建属性表格 ImageList_Create 创建图像列表
  • 16. 5.4 通用对话框“打开”文件和保存文件对话框char szFileName[MAX_PATH] = ""; OPENFILENAME file = { 0 }; file.lStructSize = sizeof(file); file.lpstrFile = szFileName; file.nMaxFile = MAX_PATH; file.lpstrFilter = "Text Files(*.txt)\0*.txt\0All Files\0*.*\0\0"; file.nFilterIndex = 1; // 弹出打开文件的对话框 if(::GetOpenFileName(&file)) { ::SetWindowText(::GetDlgItem(hDlg, IDC_FILE), szFileName); } 保存文件对话框: ::GetOpenFileName(LPOPENFILENAME lpofn);
  • 17. LPITEMIDLIST SHBrowseForFolder(LPBROWSEINFO lpbi);//显示浏览目录对话框 BOOL SHGetPathFromIDList(LPITEMIDLIST pidl,LPTSTR pszPath);//项目标志符列表转换为文件系统路径 浏览目录对话框
  • 18. 5.5 目录监视器1.编程思路
  • 19. 5.5 目录监视器::FindFirstChangeNotification(strDir, bSubDir, FILE_NOTIFY_CHANGE_SECURITY);::FindCloseChangeNotification(m_arhChange[i]);::FindNextChangeNotification(pDlg->m_arhChange[nObjectWait]);2.主要函数
  • 20. 结 束