窗口就是屏幕上的一块区域,在这块区域中,应用程序取得用户的输入,显示程序的输出。每个GUI应用程序至少要创建一个窗口,称为主窗口,它作为用户与应用程序间的主界面来提供服务。大多数应用程序也直接或者间接地创建其他窗口,来完成与主窗口相关的工作。每个窗口都在显示输出和从用户取得输入方面起着一定的作用。
窗口客户区是应用程序显示输出的部分。应用程序必须提供一个称为窗口函数的回调函数来处理窗口的输入,向客户区显示输出。
GUI应用程序的入口地址是WinMain,这是一个自定义的回调函数。
Windows的消息驱动:
创建窗口之后,就要对窗口的行为负责。是 *** 作系统告诉程序用户在窗口上的动作的。Windows不断向应用程序发送消息,通知发生了什么事情。比如用户改变了窗口大小,Windows就向这个程序发送一个消息,指明窗口新的大小。
当Windows向程序发送消息时,它调用程序中的一个函数,这个函数的参数精确地描述了Windows发送的消息。在程序中这个函数为窗口函数(Window Procedure)或消息处理函数。它是一个自定义的回调函数。SendMessage函数用于向窗口发送消息,直到目标窗口函数处理完这个消息才返回。
系统向应用程序发送消息的过程:
系统为应用程序传递所有的输入到它的各个窗口,每个窗口都关联一个窗口函数,每当这个窗口有输入时,系统调用该函数。窗口函数处理输入,然后再将控制权交给系统。
无限的消息循环:
在调用UpdateWindow函数之后,整个窗口已经显示在桌面上,程序必须准备从用户接收键盘和鼠标输入了。Windows为每个线程维护了一个消息队列,每当有一个输入发生,Windows就把用户的输入翻译成消息放在消息队列中。利用GetMessage函数可以从调用线程的消息队列中取出一个消息来填充MSG结构。如果消息队列中没有消息(即没有用户输入),这个函数会一直等待下去,直到有消息进入到消息队列为止。GetMessage函数从消息队列中取得的消息如果不是WM_QUIT,则返回非零值。一个WM_QUIT消息会促使GetMessage函数返回0,从而结束消息循环。
DispatchMessage函数分发一个消息到对应窗口的窗口函数,当它返回时,消息循环从调用GetMessage函数开始进入下一轮循环。
通常Windows程序设计者用一个switch和case结构来决定消息处理函数收到了什么消息,以及如何处理这个消息。所有消息处理函数不处理的消息都必须传给一个名为DefWindowProc的函数让Windows做默认处理,从DefWindowProc函数返回的值也必须从消息处理函数返回。否则Windows就失去了与应用程序通信的途径,也就不能再控制窗口的行为了。
WM_PAINT消息通知应用程序窗口客户区有一块或者全部变成无效,必须刷新。这意味着窗口客户区的内容必须被重画。对BeginPaint函数的调用将使整个客户区有效,然后返回设备环境句柄,在窗口的客户区显示图形和文字时需要使用这个设备环境句柄。EndPaint函数负责释放设备环境句柄,使它变得不再能用。
我创建标准WIN32 API程序WM_CREATE 消息处理创建编辑控件hwndEdit = CreateWindow (TEXT ("EDIT"), NULL,WS_CHILD | WS_VISIBLE|WS_VSCROLL |ES_LEFT | ES_MULTILINE | ES_NOHIDESEL, 0, 0, 0, 0, hwnd, (HMENU) ID_EDIT,((LPCREATESTRUCT) lParam) -> hInstance, NULL) ;
我创建菜单选择菜单编辑控件水平滚条除或添加
case ID_MENU_AUTOLINE: hMenu=GetMenu(hwnd); CheckMenuItem(hMenu,LOWORD(wParam), (GetMenuState(hMenu,LOWORD(wParam),MF_CHECKED)MF_UNCHECKED:MF_CHECKED));bLineFlag=!bLineFlag;
if(bLineFlag)
{
SetWindowLong(hwndEdit,GWL_STYLE, iEditFlag & !WS_HSCROLL);
}
else
{
SetWindowLong(hwndEdit,GWL_STYLE, iEditFlag | WS_HSCROLL);
}
return 0; 实际运行程序没任何反映事
'vbs刷新脚本程序
set ws=createobject("wscriptshell")
WsRun ("RunDll32exe USER32DLL,UpdatePerUserSystemParameters")
具体方法如下:
1、同时按键盘WIN+R调出“运行”对话框,输入“regedit”点击确定;
2、打开注册表后,依次找到注册表:HKEY_CLASSES_ROOT/Directory/Background/shellex/ContextMenuHandlers ;
3、ContextMenuHandlers下面的选项只留下New选项,其余选项全部删除,点击确定即可;
4、最后退出注册表编辑器,测试刷新效果,如果还没有奏效的话可以重启一下系统再试。
通过上面的方法进行设置后,都能解决点击桌面右键刷新反应慢的问题。希望能够帮助到大家!
以上就是关于Windows图形界面全部的内容,包括:Windows图形界面、WIN32程序有控件时怎么刷新界面、vbs或其他windows脚本程序刷新代码等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)