子窗口控件——按钮类别
2012-04-27 10:19
134 查看
每个子窗口控件都具有一个在其兄弟中唯一的窗口代号和ID值。
当按钮的高度为文字字符高度的7/4倍时,按钮的外观看起来最好,其中文字字符由BTNLOOK使用;而按钮的宽度至少调节到文字的宽度再加上两个字符的宽度。
按键: 按键控件主要用来触发一个立即响应的动作,而不保留任何形式的开/关指示。
eg:BS_PUSHBUTTON和BS_DEFPUSHBUTTON,BS_DEFPUSHBUTTON中的“DEF”代表“内定”。
复选框: 复选框是一个文字方块,文字通常出现在复选框的右边(如果您在建立按钮时指定了BS_LEFTTEXT样式, 那么文字会出现在左边;您也许将用BS_RIGHT直接调整文字来组合此样式)。复选框通常用于允许使用者 对选项进行选择的应用程序中。复选框的常用功能如同一个开关:单击框一次将显示勾选标记,再次单击清
除勾选标记.(机长时间记录一个状态!)
e.g.: BS_CHECKBOX和BS_AUTOCHECKBOX。
单选按钮: 在对话框中,单选按钮组常常用来表示相互排斥的选项。与复选框不同,单选按钮的工作与开关不一样, 也就是说,当第二次按单选按钮时,它的状态会保持不变。
e.g: 单选按钮有窗口样式BS_RADIOBUTTON或BS_AUTORADIOBUTTON两种,但是后者只用于对话框。
SendMessage (hwndButton, BM_SETCHECK, 1, 0) ; 表示选中。Auto的会自动选中。
SendMessage (hwndButton, BM_SETCHECK, 0, 0) ; 未选中。
改变按钮文字:
SetWindowText (hwnd, pszString) ;对于一般的窗口来说,这个文字是标题列的文字;对于按钮控件来说,它是随 着该按钮显示的文字。
取得窗口目前的文字: iLength = GetWindowText (hwnd, pszBuffer, iMaxLength) ;
iLength = GetWindowTextLength (hwnd) ;
Windows的字符串函数
正如前面谈到的,Microsoft C包括宽字符和需要字符串参数的C语言运行时期链接库函数的所有普通版本。不过,Windows复制了其中一部分。例如,下面是Windows定义的一组字符串函数,这些函数用来计算字符串长度、复制字符串、连接字符串和比较字符串:
理解父亲向子 和 子向父传递消息的形式~!!!
子窗口向父窗口发消息:
当您运行BTNLOOK时,将看到在显示区域的左边会显示出不同的按钮型态。我在前面已经提到过,用鼠标单击按钮时,子窗口控件就向其父窗口发送一个WM_COMMAND消息。BTNLOOK拦截WM_COMMAND消息并显示wParam和lParam的值,它们的含义如下:
父窗口向子窗口发送消息
父窗口消息处理程序也能向子窗口控件发送消息。这些消息包括以前缀WM开头的许多消息。另外,在WINUSER.H中还定义了8个按钮说明消息;前缀BM表示“按钮消息”。这些按钮消息如下表所示:
BM_GETCHECK和BM_SETCHECK消息由父窗口发送给子窗口控件,以取得或者设定复选框和单选按钮的选中标记。
SendMessage (hwndButton, BM_SETCHECK, 1, 0) ; 表示选中。Auto的会自动选中。
SendMessage (hwndButton, BM_SETCHECK, 0, 0) ; 未选中。
BM_GETSTATE和BM_SETSTATE消息表示按钮处于正常状态还是(鼠标或Spacebar键按下时的)“按下”状态。我们将在讨论按钮的每种型态时,看到这些消息是如何起作用的。BM_SETSTYLE消息允许您在按钮建立之后改变按钮样式。
可是试验后发现都可以通用!!!不知道有什么区别?http://msdn.microsoft.com/zh-cn/magazine/bb775943(en-us,VS.85).aspx 这个说的明白!
可见的和启用的按钮:
当窗口是可见的而未被启用时,那么窗口将以灰色而非黑色显示文字。
for(i = 0; i<NUM; i++)
if(IsWindowVisible(hwndButton[i])) ShowWindow(hwndButton[i], SW_HIDE);
else ShowWindow(hwndButton[i], SW_SHOWNORMAL);
for(i = 0; i<NUM; i++)
if(IsWindowEnabled(hwndButton[i])) EnableWindow(hwndButton[i],FALSE);
else EnableWindow(hwndButton[i],TRUE);
按钮和输入焦点
我在本章前面已经提到过,当用鼠标单击按钮、复选框、单选框和拥有者绘制按钮时,它们接收到输入焦点。这些控件使用文字周围的虚线来表示它拥有了输入焦点。当子窗口控件得到输入焦点时,其父窗口就失去了输入焦点;所有的键盘输入都进入子窗口控件,而不会进入父窗口中。但是,子窗口控件只对Spacebar键作出回应,此时Spacebar键的作用就如同鼠标按键一样。这种情形导致了一个明显的问题:您的程序失去了对键盘处理的控件。!!!
[cpp] view
plaincopy
/*--------------------------------------------------------------------------
BTNLOOK.C -- Button Look Program
(c) Charles Petzold, 1998
---------------------------------------------------------------------------*/
#include <windows.h>
#include<windowsx.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_AUTORADIOBUTTON, TEXT ("AUTORADIO"),
BS_OWNERDRAW, TEXT ("OWNERDRAW")
} ;
#define NUM (sizeof button / sizeof button[0])
LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
PSTR szCmdLine, int iCmdShow)
{
static TCHAR szAppName[] = TEXT ("BtnLook") ;
HWND hwnd ;
MSG msg ;
WNDCLASS wndclass ;
wndclass.style = CS_HREDRAW | CS_VREDRAW ;
wndclass.lpfnWndProc = WndProc ;
wndclass.cbClsExtra = 0 ;
wndclass.cbWndExtra = 0 ;
wndclass.hInstance = hInstance ;
wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION) ;
wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ;
wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ;
wndclass.lpszMenuName = NULL ;
wndclass.lpszClassName = szAppName ;
if (!RegisterClass (&wndclass))
{
MessageBox ( NULL, TEXT ("This program requires Windows NT!"),
szAppName, MB_ICONERROR) ;
return 0 ;
}
hwnd = CreateWindow ( szAppName, TEXT ("Button Look"),
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT,
CW_USEDEFAULT, CW_USEDEFAULT,
NULL, NULL, hInstance, NULL) ;
ShowWindow (hwnd, iCmdShow) ;
UpdateWindow (hwnd) ;
while (GetMessage (&msg, NULL, 0, 0))
{
TranslateMessage (&msg) ;
DispatchMessage (&msg) ;
}
return msg.wParam ;
}
LRESULT CALLBACK WndProc (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 ;
int maxlength;
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_KEYDOWN:
switch(wParam)
{
case VK_UP:
//SendMessage(hwndButton[2],BM_SETCHECK, 1, 0 );
SendMessage(hwndButton[3],BM_SETCHECK, 1, 0 );//复选,单选按钮
SendMessage(hwndButton[5],BM_SETSTATE, 1, 0); //按钮
break;
case VK_DOWN:
SendMessage(hwndButton[3],BM_SETCHECK, 0, 0);//父向子发送消息
SendMessage(hwndButton[4],BM_SETSTATE,0,0);
break;
case VK_RIGHT:
SendMessage(hwndButton[3],BM_SETCHECK,
(WPARAM)!SendMessage(hwndButton[3],BM_GETCHECK,0,0), 0);
break;
case VK_HOME:
//for(i = 0; i<NUM; i++)
//if(IsWindowVisible(hwndButton[i])) ShowWindow(hwndButton[i], SW_HIDE);
//else ShowWindow(hwndButton[i], SW_SHOWNORMAL);
for(i = 0; i<NUM; i++)
if(IsWindowEnabled(hwndButton[i])) EnableWindow(hwndButton[i],FALSE);
else EnableWindow(hwndButton[i],TRUE);
break;
}
hdc = GetDC(hwnd);
if(SendMessage(hwndButton[3],BM_GETCHECK,0,0))
TextOut(hdc,0,0,TEXT("TRUE"),4);
else
TextOut(hdc,0,0,TEXT("FALSE"),5);
DeleteObject(hdc);
//InvalidateRect(hwnd, &rect, TRUE);
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) ;
if((HWND)lParam == hwndButton[0]){//子向父发送消息
for(i =1; i < NUM; i++){
maxlength = GetWindowText(hwndButton[i], szBuffer, 40);
SetWindowText(hwndButton[i],lstrcat(szBuffer,L"+"));
}
}
ValidateRect (hwnd, &rect) ;
break ;
/*case WM_KILLFOCUS://系统给正在失去输入焦点的窗口发送一个WM_KILLFOCUS消息
//wParam参数是接收输入焦点的窗口的代号。
if(hwnd == GetParent((HWND)wParam))
SetFocus(hwnd);
/*等价于
for(i = 0; i<NUM; i++){
if(hwndButton[i] == (HWND) wParam){
SetFocus(hwnd);
break;
}
}
*/
return 0;
case WM_DESTROY :
PostQuitMessage (0) ;
return 0 ;
}
return DefWindowProc (hwnd, message, wParam, lParam) ;
}
id = GetWindowLong (hwndChild, GWL_ID) ;
id = GetDlgCtrlID (hwndChild) ;
hwndChild = GetDlgItem (hwndParent, id) ;
当按钮的高度为文字字符高度的7/4倍时,按钮的外观看起来最好,其中文字字符由BTNLOOK使用;而按钮的宽度至少调节到文字的宽度再加上两个字符的宽度。
按键: 按键控件主要用来触发一个立即响应的动作,而不保留任何形式的开/关指示。
eg:BS_PUSHBUTTON和BS_DEFPUSHBUTTON,BS_DEFPUSHBUTTON中的“DEF”代表“内定”。
复选框: 复选框是一个文字方块,文字通常出现在复选框的右边(如果您在建立按钮时指定了BS_LEFTTEXT样式, 那么文字会出现在左边;您也许将用BS_RIGHT直接调整文字来组合此样式)。复选框通常用于允许使用者 对选项进行选择的应用程序中。复选框的常用功能如同一个开关:单击框一次将显示勾选标记,再次单击清
除勾选标记.(机长时间记录一个状态!)
e.g.: BS_CHECKBOX和BS_AUTOCHECKBOX。
单选按钮: 在对话框中,单选按钮组常常用来表示相互排斥的选项。与复选框不同,单选按钮的工作与开关不一样, 也就是说,当第二次按单选按钮时,它的状态会保持不变。
e.g: 单选按钮有窗口样式BS_RADIOBUTTON或BS_AUTORADIOBUTTON两种,但是后者只用于对话框。
SendMessage (hwndButton, BM_SETCHECK, 1, 0) ; 表示选中。Auto的会自动选中。
SendMessage (hwndButton, BM_SETCHECK, 0, 0) ; 未选中。
改变按钮文字:
SetWindowText (hwnd, pszString) ;对于一般的窗口来说,这个文字是标题列的文字;对于按钮控件来说,它是随 着该按钮显示的文字。
取得窗口目前的文字: iLength = GetWindowText (hwnd, pszBuffer, iMaxLength) ;
iLength = GetWindowTextLength (hwnd) ;
Windows的字符串函数
正如前面谈到的,Microsoft C包括宽字符和需要字符串参数的C语言运行时期链接库函数的所有普通版本。不过,Windows复制了其中一部分。例如,下面是Windows定义的一组字符串函数,这些函数用来计算字符串长度、复制字符串、连接字符串和比较字符串:
ILength = lstrlen (pString) ; pString = lstrcpy (pString1, pString2) ; pString = lstrcpyn (pString1, pString2, iCount) ; pString = lstrcat (pString1, pString2) ; iComp = lstrcmp (pString1, pString2) ; iComp = lstrcmpi (pString1, pString2) ;
理解父亲向子 和 子向父传递消息的形式~!!!
子窗口向父窗口发消息:
当您运行BTNLOOK时,将看到在显示区域的左边会显示出不同的按钮型态。我在前面已经提到过,用鼠标单击按钮时,子窗口控件就向其父窗口发送一个WM_COMMAND消息。BTNLOOK拦截WM_COMMAND消息并显示wParam和lParam的值,它们的含义如下:
LOWORD (wParam) HIWORD (wParam) lParam | 子窗口ID 通知码 子窗口代号 |
父窗口消息处理程序也能向子窗口控件发送消息。这些消息包括以前缀WM开头的许多消息。另外,在WINUSER.H中还定义了8个按钮说明消息;前缀BM表示“按钮消息”。这些按钮消息如下表所示:
表9-2 |
按钮消息 | 值 |
---|---|
BM_GETCHECK | 0x00F0 |
BM_SETCHECK | 0x00F1 |
BM_GETSTATE | 0x00F2 |
BM_SETSTATE | 0x00F3 |
BM_SETSTYLE | 0x00F4 |
BM_CLICK | 0x00F5 |
BM_GETIMAGE | 0x00F6 |
BM_SETIMAGE | 0x00F7 |
SendMessage (hwndButton, BM_SETCHECK, 1, 0) ; 表示选中。Auto的会自动选中。
SendMessage (hwndButton, BM_SETCHECK, 0, 0) ; 未选中。
BM_GETSTATE和BM_SETSTATE消息表示按钮处于正常状态还是(鼠标或Spacebar键按下时的)“按下”状态。我们将在讨论按钮的每种型态时,看到这些消息是如何起作用的。BM_SETSTYLE消息允许您在按钮建立之后改变按钮样式。
可是试验后发现都可以通用!!!不知道有什么区别?http://msdn.microsoft.com/zh-cn/magazine/bb775943(en-us,VS.85).aspx 这个说的明白!
可见的和启用的按钮:
当窗口是可见的而未被启用时,那么窗口将以灰色而非黑色显示文字。
for(i = 0; i<NUM; i++)
if(IsWindowVisible(hwndButton[i])) ShowWindow(hwndButton[i], SW_HIDE);
else ShowWindow(hwndButton[i], SW_SHOWNORMAL);
for(i = 0; i<NUM; i++)
if(IsWindowEnabled(hwndButton[i])) EnableWindow(hwndButton[i],FALSE);
else EnableWindow(hwndButton[i],TRUE);
按钮和输入焦点
我在本章前面已经提到过,当用鼠标单击按钮、复选框、单选框和拥有者绘制按钮时,它们接收到输入焦点。这些控件使用文字周围的虚线来表示它拥有了输入焦点。当子窗口控件得到输入焦点时,其父窗口就失去了输入焦点;所有的键盘输入都进入子窗口控件,而不会进入父窗口中。但是,子窗口控件只对Spacebar键作出回应,此时Spacebar键的作用就如同鼠标按键一样。这种情形导致了一个明显的问题:您的程序失去了对键盘处理的控件。!!!
[cpp] view
plaincopy
/*--------------------------------------------------------------------------
BTNLOOK.C -- Button Look Program
(c) Charles Petzold, 1998
---------------------------------------------------------------------------*/
#include <windows.h>
#include<windowsx.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_AUTORADIOBUTTON, TEXT ("AUTORADIO"),
BS_OWNERDRAW, TEXT ("OWNERDRAW")
} ;
#define NUM (sizeof button / sizeof button[0])
LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
PSTR szCmdLine, int iCmdShow)
{
static TCHAR szAppName[] = TEXT ("BtnLook") ;
HWND hwnd ;
MSG msg ;
WNDCLASS wndclass ;
wndclass.style = CS_HREDRAW | CS_VREDRAW ;
wndclass.lpfnWndProc = WndProc ;
wndclass.cbClsExtra = 0 ;
wndclass.cbWndExtra = 0 ;
wndclass.hInstance = hInstance ;
wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION) ;
wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ;
wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ;
wndclass.lpszMenuName = NULL ;
wndclass.lpszClassName = szAppName ;
if (!RegisterClass (&wndclass))
{
MessageBox ( NULL, TEXT ("This program requires Windows NT!"),
szAppName, MB_ICONERROR) ;
return 0 ;
}
hwnd = CreateWindow ( szAppName, TEXT ("Button Look"),
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT,
CW_USEDEFAULT, CW_USEDEFAULT,
NULL, NULL, hInstance, NULL) ;
ShowWindow (hwnd, iCmdShow) ;
UpdateWindow (hwnd) ;
while (GetMessage (&msg, NULL, 0, 0))
{
TranslateMessage (&msg) ;
DispatchMessage (&msg) ;
}
return msg.wParam ;
}
LRESULT CALLBACK WndProc (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 ;
int maxlength;
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_KEYDOWN:
switch(wParam)
{
case VK_UP:
//SendMessage(hwndButton[2],BM_SETCHECK, 1, 0 );
SendMessage(hwndButton[3],BM_SETCHECK, 1, 0 );//复选,单选按钮
SendMessage(hwndButton[5],BM_SETSTATE, 1, 0); //按钮
break;
case VK_DOWN:
SendMessage(hwndButton[3],BM_SETCHECK, 0, 0);//父向子发送消息
SendMessage(hwndButton[4],BM_SETSTATE,0,0);
break;
case VK_RIGHT:
SendMessage(hwndButton[3],BM_SETCHECK,
(WPARAM)!SendMessage(hwndButton[3],BM_GETCHECK,0,0), 0);
break;
case VK_HOME:
//for(i = 0; i<NUM; i++)
//if(IsWindowVisible(hwndButton[i])) ShowWindow(hwndButton[i], SW_HIDE);
//else ShowWindow(hwndButton[i], SW_SHOWNORMAL);
for(i = 0; i<NUM; i++)
if(IsWindowEnabled(hwndButton[i])) EnableWindow(hwndButton[i],FALSE);
else EnableWindow(hwndButton[i],TRUE);
break;
}
hdc = GetDC(hwnd);
if(SendMessage(hwndButton[3],BM_GETCHECK,0,0))
TextOut(hdc,0,0,TEXT("TRUE"),4);
else
TextOut(hdc,0,0,TEXT("FALSE"),5);
DeleteObject(hdc);
//InvalidateRect(hwnd, &rect, TRUE);
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) ;
if((HWND)lParam == hwndButton[0]){//子向父发送消息
for(i =1; i < NUM; i++){
maxlength = GetWindowText(hwndButton[i], szBuffer, 40);
SetWindowText(hwndButton[i],lstrcat(szBuffer,L"+"));
}
}
ValidateRect (hwnd, &rect) ;
break ;
/*case WM_KILLFOCUS://系统给正在失去输入焦点的窗口发送一个WM_KILLFOCUS消息
//wParam参数是接收输入焦点的窗口的代号。
if(hwnd == GetParent((HWND)wParam))
SetFocus(hwnd);
/*等价于
for(i = 0; i<NUM; i++){
if(hwndButton[i] == (HWND) wParam){
SetFocus(hwnd);
break;
}
}
*/
return 0;
case WM_DESTROY :
PostQuitMessage (0) ;
return 0 ;
}
return DefWindowProc (hwnd, message, wParam, lParam) ;
}
相关文章推荐
- 子窗口控件——按钮类别
- 子窗口控件——按钮(BUTTONS)
- 同一个窗口中不同的按钮控件使用同一个storyboard的方法(WPF)
- 获取当前窗口的所有按钮控件,并打印其状态
- Windows程序设计第九章子窗口控件--自绘按钮
- 局部刷新 与 点击按钮弹出窗口 (ajax 控件 updatepanel ModalPopupExtender ) 今天怎么老出问题呢
- Tab控件下子对话窗口的按钮不响应消息
- MFC单文档窗口添加按钮控件
- 解决第二次弹出上传窗口 上传控件的异常(无浏览按钮)
- 怎样隐藏uploadify上传控件的按钮,然后通过其它控件的事项来触发uploadify控件的文件浏览窗口并现实文件上传功能
- Python pyQt4/pyQt5 学习笔记1(空白窗口,按钮,控件事件,控件提示,窗体显示到屏幕中间,messagebox)
- 局部刷新 与 点击按钮弹出窗口 (ajax 控件 updatepanel ModalPopupExtender )
- 通过按钮控件实现MDI新建子窗口(MFC自动生成的视图、文档、子框架共用)
- 资源文件中对话框之控件的窗口类别和窗口样式
- C#同一项目中一个窗口中的按钮去操控另一个窗口控件
- 子窗口控件——按钮(BUTTONS)
- 通过按钮控件实现MDI新建子窗口
- 窗口控件操作:增加最小化按钮
- 怎样隐藏uploadify上传控件的按钮,然后通过其它控件的事项来触发uploadify控件的文件浏览窗口并现实文件上传功能
- 第九章 子窗口控件(静态类别,滚动条类别)