子窗口控件(1)瞟一眼按钮类
来源:互联网 发布:july算法视频 百度盘 编辑:程序博客网 时间:2024/06/05 00:51
下面这个程序,在单击每个按钮时,该按钮会向其父窗口发送WM_COMMAND消息,这个窗口过程就是我们所熟悉的WindowProc,函数将在客户区的右侧显示这个消息的wParam和lParam参数
创建子窗口的参数如下
类名TEXT("button")窗口文本button[i].szText窗口样式WS_CHILD|WS_VISIBLE|button[i].iStyleX坐标cxCharY坐标cyChar*(1+2*i)宽度20*xChar高度7*yChar/4父窗口hwnd子窗口ID(HMUNE)i案例句柄((LPCREATESTRUCT)lParam)->hInstance额外参数NULL其中案例句柄可以声明一个全局变量(HINSTANCE hInst;),然后在WinMain赋值 hInst=hInstance;
列表框,按钮控件,编辑控件相应的wParam,lParam变量的含义是一样的
LOWORD(wParam)子窗口IDHIWORD(wParam)通知码lParam子窗口
在后面的博客中,会多次出现
cxClient=LOWORD(lParam);switch (LOWORD (wParam))//低位wParam获取通知码 { case SB_PAGEDOWN : ......
case WM_VSCROLL : i = GetWindowLong ((HWND) lParam, GWL_ID) ; switch (LOWORD (wParam))//低位wParam获取通知码 { case SB_PAGEDOWN : color[i] += 15 ;
switch (message)//确定焦点,实现用tab键来转换焦点 { case WM_KEYDOWN : if (wParam == VK_TAB) SetFocus (GetDlgItem (GetParent (hwnd),
诸如此类的东西,大家要弄明白wParam,lParam参数在不同的环境,所代表的意义。
看完整程序:
#include<windows.h>struct{int iStyle;TCHAR * szText;}button[]={BS_PUSHBUTTON ,TEXT("PUSHBUTTON"),BS_DEFPUSHBUTTON,TEXT("DEFPUSHBUTTON"),BS_CHECKBOX,TEXT("CHECKBOX"),BS_AUTOCHECKBOX,TEXT("AUTOCHECKBOX"),BS_RADIOBUTTON,TEXT("RADIOBUTTON"),BS_3STATE,TEXT("3STATE"),BS_AUTO3STATE,TEXT("AUTO3STATE"),BS_GROUPBOX,TEXT("GROUPBOX"),BS_OWNERDRAW,TEXT("OWNERDRAW")};#define NUM (sizeof(button)/sizeof(button[0]))LRESULT CALLBACK WindowProc( HWND hwnd, // handle to window UINT uMsg, // message identifier WPARAM wParam, // first message parameter LPARAM lParam // second message parameter);int WINAPI WinMain( HINSTANCE hInstance, // handle to current instance HINSTANCE hPrevInstance, // handle to previous instance LPSTR lpCmdLine, // command line int nCmdShow // show state){static TCHAR szAppName[]=TEXT("leidemingzi");HWND hwnd;MSG msg;WNDCLASS wndclass;wndclass.cbClsExtra=0;wndclass.cbWndExtra=0;wndclass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);wndclass.hCursor=LoadCursor(NULL,IDC_ARROW);wndclass.hIcon=LoadIcon(NULL,IDI_ERROR);wndclass.hInstance=hInstance;wndclass.lpfnWndProc=WindowProc;wndclass.lpszClassName=szAppName;wndclass.lpszMenuName=NULL;wndclass.style=CS_HREDRAW|CS_VREDRAW;if(!RegisterClass(&wndclass)){MessageBox(NULL,TEXT("the program require window nt"),TEXT("TIPS"),MB_ICONERROR);return 0;}hwnd=CreateWindow( szAppName, // registered class name TEXT("this is title"), // window name WS_OVERLAPPEDWINDOW, // window style CW_USEDEFAULT, // horizontal position of window CW_USEDEFAULT, // vertical position of window CW_USEDEFAULT, // window width CW_USEDEFAULT, // window height NULL, // handle to parent or owner window NULL, // menu handle or child identifier hInstance, // handle to application instanceNULL // window-creation data);ShowWindow(hwnd,nCmdShow);UpdateWindow(hwnd);while(GetMessage(&msg,NULL,0,0)){TranslateMessage(&msg);DispatchMessage(&msg);}return msg.wParam;}LRESULT CALLBACK WindowProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam){ static HWND hwndButton[NUM] ; static RECT rect ; static TCHAR szTop[] = TEXT ("message wParam lParam"), szUnd[] = TEXT ("_______ ______ ______"), szFormat[] = TEXT ("%-16s%04X-%04X %04X-%04X"), szBuffer[50] ; static int cxChar, cyChar ; HDC hdc ; PAINTSTRUCT ps ; int i ; switch (message) { case WM_CREATE : cxChar = LOWORD (GetDialogBaseUnits ()) ; cyChar = HIWORD (GetDialogBaseUnits ()) ; for (i = 0 ; i < NUM ; i++) hwndButton[i] = CreateWindow ( TEXT("button"), button[i].szText, WS_CHILD | WS_VISIBLE | button[i].iStyle, cxChar, cyChar * (1 + 2 * i), 20 * cxChar, 7 * cyChar / 4, hwnd, (HMENU) i, ((LPCREATESTRUCT) lParam)->hInstance, NULL) ; return 0 ; case WM_SIZE : rect.left = 24 * cxChar ; rect.top = 2 * cyChar ; rect.right = LOWORD (lParam) ; rect.bottom = HIWORD (lParam) ; return 0 ; case WM_PAINT : InvalidateRect (hwnd, &rect, TRUE) ; hdc = BeginPaint (hwnd, &ps) ; SelectObject (hdc, GetStockObject (SYSTEM_FIXED_FONT)) ; SetBkMode (hdc, TRANSPARENT) ; TextOut (hdc, 24 * cxChar, cyChar, szTop, lstrlen (szTop)) ; TextOut (hdc, 24 * cxChar, cyChar, szUnd, lstrlen (szUnd)) ; EndPaint (hwnd, &ps) ; return 0 ; case WM_DRAWITEM : case WM_COMMAND : ScrollWindow (hwnd, 0, -cyChar, &rect, &rect) ; hdc = GetDC (hwnd) ; SelectObject (hdc, GetStockObject (SYSTEM_FIXED_FONT)) ; TextOut (hdc, 24 * cxChar, cyChar * (rect.bottom / cyChar - 1), szBuffer, wsprintf (szBuffer, szFormat, message == WM_DRAWITEM ? TEXT ("WM_DRAWITEM") : TEXT ("WM_COMMAND"), HIWORD (wParam), LOWORD (wParam), HIWORD (lParam), LOWORD (lParam))) ; ReleaseDC (hwnd, hdc) ; ValidateRect (hwnd, &rect) ; break ; case WM_DESTROY : PostQuitMessage (0) ; return 0 ; } return DefWindowProc (hwnd, message, wParam, lParam) ;}
看看效果图:
- 子窗口控件(1)瞟一眼按钮类
- 第九章 9-1 子窗口控件:按钮类
- 子窗口控件——按钮(BUTTONS)
- 子窗口控件——按钮(BUTTONS)
- 子窗口控件——按钮类别
- 子窗口控件——按钮类别
- 通过按钮控件实现MDI新建子窗口
- 子窗口控件
- 改变子窗口控件
- 子窗口控件
- 子窗口控件WaterWnd
- 子窗口控件 复习
- 控件是不是子窗口
- 九、子窗口控件
- 窗口子控件
- 父窗口调用子窗口的按钮
- 父窗口调用子窗口的按钮
- 子窗口控件(3)之属性罗列和自绘按钮
- Hibernate的事务提交
- poj 2653 Pick-up sticks(线段相交)
- 关于C++虚继承、虚函数继承的几个例子
- [热身题][hdoj_2042]不容易系列之二
- Excel中两列内容合并
- 子窗口控件(1)瞟一眼按钮类
- 中国历史纪元表
- PB中自定义事件ID含义
- PB对DW数据窗口操作必学
- UVA 5983 - MAGRID
- dw2xls已升级至pb11.5
- 一个字符串复制到一个新的存储分配
- start of WindowManagerService
- 写给大一翘课后悔了的同学