- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2011年2月19日 C++程序设计
总结
• 1、菜单命令主要通过菜单项ID对应 • 2、按钮、CheckBox,Radio在本质上 是按钮,通过按钮ID响应事件 • 3、对话框可以动态加载资源和消息响应 函数
2011年2月19日
C++程序设计
作业
• 用WINDOWS编程实现工作室选方向系统 • 要求:1、用对话框实现登录框。2、主窗口根 据不同的登录加载不同的菜单3、对学生,在 每个方向后加一个“选择”的单选框,并响应 消息和记录数据。4、对管理员,提供各种增 加、修改数据的对话框(由菜单调用),查看 数据时提供删除和修改的按钮。 • 提示:登录对话框在主函数中创建,退出登录 时关闭当前窗口(CloseWindow)重新显示或 创建登录对话框。对每种对话框用一个后台的 类来处理相应的数据。
2011年2月19日 C++程序设计
4、快捷键
• 快捷键资源的定义
可选已有的,也可以 重新定义
2011年2月19日
C++程序设计
4、快捷键
• 资源加载LoadAccelerators(hInstance, (LPCTSTR)IDC_PROJWIN32); • 资源应用:TranslateAccelerator(msg.hwnd, hAccelTable, &msg) • 消息响应:case WM_COMMAND: wmId = LOWORD(wParam); switch (wmId) { case IDM_ABOUT://与快捷键对应的ID …………………………
属性
选择需要 的控件
2011年2月19日
C++程序设计
6.2创建对话框窗口
DialogBox(hInst,//实例句柄 (LPCTSTR)IDD_DIALOG_LOGIN, //资源ID hWnd,//父窗口句柄 (DLGPROC)Login);//消息处理函数
2011年2月19日
C++程序设计
6.3响应对话框消息
2011年2月19日 C++程序设计
1.4消息循环和消息处理
• switch (message) //根据不同的消息做不同的响应 • { • case WM_COMMAND: • ………… • case WM_PAINT: • …… • break; • case WM_DESTROY: • PostQuitMessage(0); • break; • default: • return DefWindowProc(hWnd, message, wParam, lParam); • }
2011年2月19日 C++程序设计
5、编辑框
• 创建: CreateWindow(“Edit","",WS_CHILD| WS_VISIBLE|ES_LEFT|ES_PASSW ORD ,……); • 获得值:int GetWindowText( HWND hWnd, LPTSTR lpString, int nMaxCount );
2011年2月19日 C++程序设计
1.4消息循环和消息处理
根据快捷键将键盘消息 while (GetMessage(&msg, NULL, 0, 0)) 翻译为系统命令 { if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg)) 将键盘消息翻译为字符 消息 { TranslateMessage(&msg); DispatchMessage(&msg); } 将消息分发给窗口的消 } 息处理函数
2011年2月19日 C++程序设计
3.4复选框
• 创建:CreateWindow(“Button”,“复选 ",WS_CHILD|WS_VISIBLE|BS_CHECKB OX,……); SetWindowLong(hButton , GWL_ID, IDC_BUTTON_TEST); • 响应: CheckDlgButton(hWnd,IDC_BUTTON_TE ST,BST_CHECKED); • 获得状态: IsDlgButtonChecked( hWnd,IDC_BUTTON _TEST);
C++程序设计
2.2菜单加载
• 加载函数HMENU WINAPI LoadMenu( HINSTANCE hInstance, LPCSTR lpMenuName); • LPCTSTR——LPCSTR——CONST CHAR *——const char * • lpMenuName—— (LPCTSTR)IDR_MENU_MY_TEST
ID字符指针
2011年2月19日 C++程序设计
2.3菜单的使用
• 方法一:注册窗口使用wcex.lpszMenuName= (LPCSTR)IDC_PROJWIN32; • 方法二:创建窗口使用HMENU hMenu=LoadMenu(hInstance,(LPCTSTR)ID R_MENU_MY_TEST); hWnd = CreateWindow(……, hMenu, ……); • 方法三:弹出菜单使用 TrackPopupMenu(hMenu,TPM_LEFTALIGN ,x,y,0,hWnd,&rect);
Hale Waihona Puke 2011年2月19日C++程序设计
1.3创建窗口
HWND CreateWindow( //返回窗口句柄 LPCTSTR lpClassName, //窗口类名 LPCTSTR lpWindowName, //窗口标题 DWORD dwStyle, //窗口风格 int x, int y, 窗口位置 int nWidth, int nHeight, HWND hWndParent, //父窗口句柄 HMENU hMenu, //菜单句柄 HINSTANCE hInstance, //应用实例句柄 LPVOID lpParam ); //CREATESTRUCT指针,多文档使用
2011年2月19日
C++程序设计
2.1菜单资源
• 添加和修改菜单
在虚框上点右键
2011年2月19日
C++程序设计
2.1菜单资源
• 添加和修改菜单
选中pop-up,则变为父菜 单,自动弹出新虚框
2011年2月19日
C++程序设计
2.1菜单资源
不选择Pop-up则可 输入ID
2011年2月19日
LRESULT CALLBACK Login(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) { switch (message) { case WM_INITDIALOG://初始化对话框 return TRUE; case WM_COMMAND://一般命令 int cmdID=LOWORD(wParam); switch(cmdID){ case IDOK:……………… • case IDCANCEL: • EndDialog(hDlg, cmdID); • ………………………………………………
2011年2月19日
C++程序设计
2、菜单
• • • • 2.1菜单资源 2.2菜单加载 2.3菜单的使用 2.4菜单消息的响应
2011年2月19日
C++程序设计
2.1菜单资源
• 菜单资源的创建
2011年2月19日
C++程序设计
2.1菜单资源
• 修改资源名称:方便记忆 • 资源名称本质:宏定义(resource.h)
wcex.lpfnWndProc= (WNDPROC)WndProc;//设置消 息处理函数 • wcex.hIcon= LoadIcon(hInstance, (LPCTSTR)IDI_KKK);//加载图标 • wcex.hCursor= LoadCursor(hInstance, (LPCTSTR)IDC_NODROP);//加载鼠标 • wcex.hbrBackground= (HBRUSH)(COLOR_WINDOW+1);//设置背景色 • wcex.lpszMenuName= (LPCSTR)IDC_KKK;//菜单 • wcex.lpszClassName= szWindowClass;//窗口类名 • return RegisterClassEx(&wcex);//注入系统
2011年2月19日
C++程序设计
1.1Windows程序主要框架
RegisterClass WinMain CreateWindow GetMe ssage Dispatch Message
2011年2月19日
函数指针
Translate Message
WndProc
回调函数
C++程序设计
1.2注册窗口类
2011年2月19日 C++程序设计
3.3单选框
• 创建:CreateWindow("Button","单选 ",WS_CHILD|WS_VISIBLE|BS_RADIOB UTTON,……); SetWindowLong(hButton , GWL_ID, IDC_BUTTON_TEST); • 响应: CheckDlgButton(hWnd,IDC_BUTTON_TE ST,BST_CHECKED); • 获得状态: IsDlgButtonChecked( hWnd,IDC_BUTTON _TEST);
C++程序设计