ScrollWindow的一些问题
caseWM_SIZE:if(message==WM_SIZE){cxClient=LOWORD(lParam);cyClient=HIWORD(lParam);}//C...
case WM_SIZE:
if (message == WM_SIZE)
{
cxClient = LOWORD (lParam) ;
cyClient = HIWORD (lParam) ;
}
// Calculate scrolling rectangle
rectScroll.left = 0 ;
rectScroll.right = cxClient ;
rectScroll.top = cyChar ;
rectScroll.bottom = cyChar * (cyClient / cyChar) ;
InvalidateRect (hwnd, NULL, TRUE) ;
return 0 ;
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) ;
InvalidateRect (hwnd, NULL, TRUE) ;
break ; // ie, call DefWindowProc so Sys messages work
上面是窗口过程中的case的部分语句
我想问几个问题
1.所谓的更新区域和无效区域是同一个概念吗。
2.这个程序在处理WM_SIZE时最后为什么要加上InvalidateRect (hwnd, NULL, TRUE) ;
好像不加上也没什么区别啊
3.ScrollWindow这个函数具体是干什么的,msdn说是滚动客户区,具体是指什么,这部分最头疼,希望有例子,可以讲得详细点,而且,他与InvalidateRect (hwnd, NULL, TRUE) ;有什么区别呢,我把处理
case WM_KEYDOWN:
case WM_KEYUP:
case WM_CHAR:
case WM_DEADCHAR:
case WM_SYSKEYDOWN:
case WM_SYSKEYUP:
case WM_SYSCHAR:
case WM_SYSDEADCHAR:
这些消息最后的ScrollWindow改为InvalidateRect (hwnd, NULL, TRUE) ;发现效果完全一样,是不是这两种方法是一样的呢,希望给我详细讲解一下ScrollWindow这个函数,越具体越好,万分感谢
顺便说下,这个程序来自windows程序设计中217页,就是键盘的那一章
万分感谢,被这东西搞得头疼 展开
if (message == WM_SIZE)
{
cxClient = LOWORD (lParam) ;
cyClient = HIWORD (lParam) ;
}
// Calculate scrolling rectangle
rectScroll.left = 0 ;
rectScroll.right = cxClient ;
rectScroll.top = cyChar ;
rectScroll.bottom = cyChar * (cyClient / cyChar) ;
InvalidateRect (hwnd, NULL, TRUE) ;
return 0 ;
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) ;
InvalidateRect (hwnd, NULL, TRUE) ;
break ; // ie, call DefWindowProc so Sys messages work
上面是窗口过程中的case的部分语句
我想问几个问题
1.所谓的更新区域和无效区域是同一个概念吗。
2.这个程序在处理WM_SIZE时最后为什么要加上InvalidateRect (hwnd, NULL, TRUE) ;
好像不加上也没什么区别啊
3.ScrollWindow这个函数具体是干什么的,msdn说是滚动客户区,具体是指什么,这部分最头疼,希望有例子,可以讲得详细点,而且,他与InvalidateRect (hwnd, NULL, TRUE) ;有什么区别呢,我把处理
case WM_KEYDOWN:
case WM_KEYUP:
case WM_CHAR:
case WM_DEADCHAR:
case WM_SYSKEYDOWN:
case WM_SYSKEYUP:
case WM_SYSCHAR:
case WM_SYSDEADCHAR:
这些消息最后的ScrollWindow改为InvalidateRect (hwnd, NULL, TRUE) ;发现效果完全一样,是不是这两种方法是一样的呢,希望给我详细讲解一下ScrollWindow这个函数,越具体越好,万分感谢
顺便说下,这个程序来自windows程序设计中217页,就是键盘的那一章
万分感谢,被这东西搞得头疼 展开
2个回答
展开全部
1.更新区域就是在WM_PAINT消息里需要更新的区域,无效区就是当你的程序窗口有一部分被挡住或其他原因变得无效的区域,其实就是一个概念。
2.因为WM_SIZE之后并不一定产生WM_PAINT消息,当你把鼠标放在程序窗口边拉窗口边,使窗口大小改变时,如果设置了窗口大小改变后重画窗口的属性时,就会产生一个WM_SIZE消息,但如果你的窗口内并不产生无效区域的话,就不会有WM_PAINT消息。而InvalidateRect(hwnd,NULL,TRUE).函数是使窗口客户区无效,而产生WM_PAINT消息。
3.ScrollWindow是卷屏,学过DOS汇编编程的话,就会对这个卷屏不陌生,是整个屏的内容向上或向下平移,屏顶内容将会移出屏而消失,而下面会空出。在这个程序里,把这个函数的位置换成InvalidateRect,对输出不会有影响,他们都是靠产生WM_PAINT而工作的。InvalidateRect产生的WM_PAINT处理消息里,程序把所有应该输出的都重新输出一回。而在ScrollWindow产生的WM_PAINT的消息里,程序输出的部分只是卷屏之后留出的空白地方重新输出。但是看起来结果是一样的。他们产生的WM_PAINT消息里所带的无效区域是不一样的。
2.因为WM_SIZE之后并不一定产生WM_PAINT消息,当你把鼠标放在程序窗口边拉窗口边,使窗口大小改变时,如果设置了窗口大小改变后重画窗口的属性时,就会产生一个WM_SIZE消息,但如果你的窗口内并不产生无效区域的话,就不会有WM_PAINT消息。而InvalidateRect(hwnd,NULL,TRUE).函数是使窗口客户区无效,而产生WM_PAINT消息。
3.ScrollWindow是卷屏,学过DOS汇编编程的话,就会对这个卷屏不陌生,是整个屏的内容向上或向下平移,屏顶内容将会移出屏而消失,而下面会空出。在这个程序里,把这个函数的位置换成InvalidateRect,对输出不会有影响,他们都是靠产生WM_PAINT而工作的。InvalidateRect产生的WM_PAINT处理消息里,程序把所有应该输出的都重新输出一回。而在ScrollWindow产生的WM_PAINT的消息里,程序输出的部分只是卷屏之后留出的空白地方重新输出。但是看起来结果是一样的。他们产生的WM_PAINT消息里所带的无效区域是不一样的。
微测检测5.10
2023-05-10 广告
2023-05-10 广告
您好!建议咨 深圳市微测检测有限公司,已建立起十余个专业实验室,企业通过微测检测就可以获得一站式的测试与认 证解决方案;(EMC、RF、MFi、BQB、QI、USB、安全、锂电池、快充、汽车电子EMC、汽车手机互 联、语音通话质量),认证遇...
点击进入详情页
本回答由微测检测5.10提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询