case WM_KEYDOWN:
case WM_KEYUP:
case WM_CHAR:
case WM_DEADCHAR:
case WM_SYSKEYDOWN:
case WM_SYSKEYUP:
case WM_SYSCHAR:
case WM_SYSDEADCHAR:
// Rearrange storage array
for (i = cLinesMax - 1 ; i > 0 ; i--)
{
pmsg[i] = pmsg[i - 1] ;
}
// Store new message
pmsg[0].hwnd = hwnd ;
pmsg[0].message = message ;
pmsg[0].wParam = wParam ;
pmsg[0].lParam = lParam ;
cLines = min (cLines + 1, cLinesMax) ;
// Scroll up the display
ScrollWindow (hwnd, 0, -cyChar, &rectScroll, &rectScroll) ;
break ; // i.e., call DefWindowProc so Sys messages work
case WM_PAINT:
hdc = BeginPaint (hwnd, &ps) ;
SelectObject (hdc, GetStockObject (SYSTEM_FIXED_FONT)) ;
SetBkMode (hdc, TRANSPARENT) ;
TextOut (hdc, 0, 0, szTop, lstrlen (szTop)) ;
TextOut (hdc, 0, 0, szUnd, lstrlen (szUnd)) ;
for (i = 0 ; i < min (cLines, cyClient / cyChar - 1) ; i++)
{
iType = pmsg[i].message == WM_CHAR ||
pmsg[i].message == WM_SYSCHAR ||
pmsg[i].message == WM_DEADCHAR ||
pmsg[i].message == WM_SYSDEADCHAR ;
GetKeyNameText (pmsg[i].lParam, szKeyName,
sizeof (szKeyName) / sizeof (TCHAR)) ;
TextOut (hdc, 0, (cyClient / cyChar - 1 - i) * cyChar, szBuffer,
wsprintf (szBuffer, szFormat [iType],
szMessage [pmsg[i].message - WM_KEYFIRST],
pmsg[i].wParam,
(PTSTR) (iType ? TEXT (" ") : szKeyName),
(TCHAR) (iType ? pmsg[i].wParam : ' '),
LOWORD (pmsg[i].lParam),
HIWORD (pmsg[i].lParam) & 0xFF,
0x01000000 & pmsg[i].lParam ? szYes : szNo,
0x20000000 & pmsg[i].lParam ? szYes : szNo,
0x40000000 & pmsg[i].lParam ? szDown : szUp,
0x80000000 & pmsg[i].lParam ? szUp : szDown)) ;
}
EndPaint (hwnd, &ps) ;
return 0 ;
假如连续输入abc
window接到按键消息a
然后传递给程序
然后存在 pmsg【0】;
然后调用WM_PAINT
window接到按键消息 b
然后传递给程序
然后存在 pmsg【0】;
然后调用WM_PAINTWM_PAINT()是不是每输入一个字符就会调用一次
还是先把输入的信息放在数组然后最后一次用WM_PAINT()
输出所有
case WM_KEYUP:
case WM_CHAR:
case WM_DEADCHAR:
case WM_SYSKEYDOWN:
case WM_SYSKEYUP:
case WM_SYSCHAR:
case WM_SYSDEADCHAR:
// Rearrange storage array
for (i = cLinesMax - 1 ; i > 0 ; i--)
{
pmsg[i] = pmsg[i - 1] ;
}
// Store new message
pmsg[0].hwnd = hwnd ;
pmsg[0].message = message ;
pmsg[0].wParam = wParam ;
pmsg[0].lParam = lParam ;
cLines = min (cLines + 1, cLinesMax) ;
// Scroll up the display
ScrollWindow (hwnd, 0, -cyChar, &rectScroll, &rectScroll) ;
break ; // i.e., call DefWindowProc so Sys messages work
case WM_PAINT:
hdc = BeginPaint (hwnd, &ps) ;
SelectObject (hdc, GetStockObject (SYSTEM_FIXED_FONT)) ;
SetBkMode (hdc, TRANSPARENT) ;
TextOut (hdc, 0, 0, szTop, lstrlen (szTop)) ;
TextOut (hdc, 0, 0, szUnd, lstrlen (szUnd)) ;
for (i = 0 ; i < min (cLines, cyClient / cyChar - 1) ; i++)
{
iType = pmsg[i].message == WM_CHAR ||
pmsg[i].message == WM_SYSCHAR ||
pmsg[i].message == WM_DEADCHAR ||
pmsg[i].message == WM_SYSDEADCHAR ;
GetKeyNameText (pmsg[i].lParam, szKeyName,
sizeof (szKeyName) / sizeof (TCHAR)) ;
TextOut (hdc, 0, (cyClient / cyChar - 1 - i) * cyChar, szBuffer,
wsprintf (szBuffer, szFormat [iType],
szMessage [pmsg[i].message - WM_KEYFIRST],
pmsg[i].wParam,
(PTSTR) (iType ? TEXT (" ") : szKeyName),
(TCHAR) (iType ? pmsg[i].wParam : ' '),
LOWORD (pmsg[i].lParam),
HIWORD (pmsg[i].lParam) & 0xFF,
0x01000000 & pmsg[i].lParam ? szYes : szNo,
0x20000000 & pmsg[i].lParam ? szYes : szNo,
0x40000000 & pmsg[i].lParam ? szDown : szUp,
0x80000000 & pmsg[i].lParam ? szUp : szDown)) ;
}
EndPaint (hwnd, &ps) ;
return 0 ;
假如连续输入abc
window接到按键消息a
然后传递给程序
然后存在 pmsg【0】;
然后调用WM_PAINT
window接到按键消息 b
然后传递给程序
然后存在 pmsg【0】;
然后调用WM_PAINTWM_PAINT()是不是每输入一个字符就会调用一次
还是先把输入的信息放在数组然后最后一次用WM_PAINT()
输出所有
解决方案 »
- 数据库奇怪问题
- 关于ReadDirectoryChangesW问题,帮帮忙...
- 关于结构体如何序列化和反序列话
- 高分求 qq好友列表框的实现
- 请问如何截获word 中textbox控件的键盘事件?
- 求购成熟的信息采集软件
- 到底GetTextMetrics和GetTextExtend得到的高度有什么不同啊,请详解
- 请问如何在win32dll中使用mfc的基础类cmap,并不使用其他资源(看了之前的帖子也不清楚)急!
- 后台用的是MS SQL SERVER ,当存进浮点数时,例如0.01,在数据库中显示的是 .01,怎么回事
- 如何从list control 控件返回某一条纪录的某一字段
- 请问怎样根据采集数据绘图啊?
- 菜鸟问问题
UpdateWindow or RedrawWindow 函数之后,会触发这个消息。。
所以,是每次都触发了 WM_PAINT 消息。。
UpdateWindow or RedrawWindow 函数之后,会触发WM_PAINT 这个消息。那么
for (i = cLinesMax - 1 ; i > 0 ; i--)
{
pmsg[i] = pmsg[i - 1] ;
}
又会重新执行
那么i 又= cLinesMax - 1
那么每次数组里面只是有一个元素。a会是pmsg【0】;
b也是pmsg【0】; 同时他后面该没有元素的只有pmsg【0】; 这个元素