窗口有三大风格:
重叠窗口:WS_OVERLAPPEDWINDOW 一般是作为主窗口
弹出窗口:WS_POPUPWINDOW 一般是程序运行时的提示窗口,操作面板。。
子窗口:WS_CHILD 一般是控件
控件:
创建控件,使用的还是CreateWindow(..WS_CHILD|WS_VISIABLE..,ID…);
标准控件:(简单一些的控件)
按钮 复选框 单选框 文本框 下拉框 静态文本
当你点击了标准控件的时候,给父窗口发送:WM_COMMAD
ID:LOWORD(wParam)
Code:HIWORD(wParam)
控件句柄:lParam
通用控件:(扩展的控件,有比较复杂的)
树(tree) 列表(list view) 选项卡(tab)
当你点击了标准控件的时候,给父窗口发送:WM_NOTIFY
创建控件的示例代码:
case WM_CREATE://一般进行一些初始化的操作{//WM_CREATE的lParam参数携带的是创建窗口时的信息。LPCREATESTRUCT pcs = (LPCREATESTRUCT)lParam;//1 创建按钮hButton1 = CreateWindow(_T("button"),_T("点我"),BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE,100, 100, 80, 30,hWnd,(HMENU)0x1001,pcs->hInstance,0);hButton2 = CreateWindow(_T("button"),_T("别点我"),BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE,190, 100, 80, 30,hWnd,(HMENU)0x1002,pcs->hInstance,0);hButton3 = CreateWindow(_T("button"), _T("获取文本"),BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE,100, 140, 80, 30, hWnd, (HMENU)0x1003, pcs->hInstance,0);hButton4 = CreateWindow(_T("button"), _T("设置文本"),BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE,190, 140, 80, 30, hWnd, (HMENU)0x1004, pcs->hInstance,0);//2 创建文本框hText1 = CreateWindow(_T("edit"),_T(""),WS_CHILD | WS_VISIBLE|WS_BORDER,100, 180, 200, 30,hWnd,(HMENU)0x2001,g_hInstance,NULL);//3 创建。。。。}break;
控件响应的示例代码:
case WM_COMMAND:{int nCode = HIWORD(wParam);int nId = LOWORD(wParam);switch (nId){case 0x1001://除了弹你好之外,再移动一下按钮2if (nCode==BN_CLICKED){MessageBox(0, L"你好啊", L"呵呵", 0);MoveWindow(hButton2, 300, 100, 80, 80, TRUE);}break;case 0x1002:{MessageBox(0, L"告诉你别点我", L"呵呵", 0);static int n = 0;if (n==0){ShowWindow((HWND)0x00020206, SW_SHOW);n = 1;}else{ShowWindow((HWND)0x00020206, SW_SHOW);n = 0;}}break;case 0x1003://获取文本框文本{TCHAR buf[100] = {};//GetWindowText(hWnd, buf, 100);GetWindowText(hText1, buf, 100);MessageBox(0, buf, _T("提示"), 0);}break;case 0x1004://获取到文本,加个1,再设置回去{TCHAR buf[100] = {};int nNum = 0;//1 获取文本,转为数字GetWindowText(hText1, buf, 100);_stscanf_s(buf, _T("%d"), &nNum);//2 自增之后,转为文本,设置到编辑框上nNum++;_stprintf_s(buf, _T("%d"), nNum);SetWindowText(hText1, buf);}break;default:break;}}break;
资源:
图标:


IDI_ICON1就是此图标资源的ID。
我们也可以导入光标资源:
wc.hIcon = LoadIcon(hInstance,MAKEINTRESOURCE( IDI_ICON1));wc.hCursor = LoadCursor(hInstance, MAKEINTRESOURCE(IDC_CURSOR1));
菜单资源:
顶级菜单,是用于弹出下拉菜单的,没有其他的消息产生
下拉菜单,是有具体消息产生的
窗口类:
wc.lpszMenuName = MAKEINTRESOURCE(IDR_MENU1);
创建窗口的时候:
弹出菜单:
主要需要使用:
TrackPopupMenu
主要需要注意的2个点:
1 坐标要使用屏幕坐标
2 弹出的菜单,需要是下拉菜单,最好不是顶级菜单。
case WM_RBUTTONDOWN://鼠标右键单击{//这个坐标是相对于窗口的坐标int x = LOWORD(lParam);int y = HIWORD(lParam);//弹出的时候,使用是相对于屏幕的坐标//需要做一个转换POINT pt = { x,y };ClientToScreen(hWnd, &pt);//弹出菜单HMENU hMenu = LoadMenu(g_hInstance, MAKEINTRESOURCE(IDR_MENU1));//获取下拉菜单的句柄HMENU hSubMenu0 =GetSubMenu(hMenu, 0);HMENU hSubMenu1 = GetSubMenu(hMenu, 1);TrackPopupMenu(hSubMenu1, //要弹出的菜单的句柄TPM_LEFTALIGN,//对齐方式等属性pt.x, pt.y, //弹出的坐标0, //保留的参数 ,没有用hWnd, //菜单的响应窗口是谁NULL);}break;
对话框编程:
添加一个dlg资源:
