关于IE控件闪烁解决方案

标准系统控件闪烁主要原因,是因为每次重绘时需要绘制两次,第一次擦出背景绘制,第二次绘制内容,两次绘制颜色不一样,导致用户看见控件闪烁!

解决办法就是拦截系统控件背景擦出消息 WM_ERASEBKGND ,不让它擦出背景,这样就不会闪烁!

IE控件比较特殊,所以处理起来也比较麻烦,下面是对IE控件的特殊处理.

LONG prevProc1=NULL; HHOOK hHook=NULL; LRESULT CALLBACK MyWndProc1(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) {         if(WM_ERASEBKGND==message) //拦截背景擦出消息                 return 0;          return CallWindowProc((WNDPROC)prevProc1,hWnd,  message,  wParam,  lParam); }  //对IE控件子类化 LRESULT CALLBACK CallWndProc(int nCode,   WPARAM wParam,   LPARAM lParam)  {         if(HC_ACTION==nCode)         {                 PCWPSTRUCT pInfo=(PCWPSTRUCT)lParam;                 if(WM_CREATE==pInfo->message)                 {                         char className[101]={0};                         GetClassNameA(pInfo->hwnd,className,100);                         if(0==strcmp(className,"Internet Explorer_Server"))                         {                                 prevProc1=GetWindowLong(pInfo->hwnd,GWL_WNDPROC);                                 SetWindowLong(pInfo->hwnd,GWL_WNDPROC,(LONG)MyWndProc1);                         }                 }         }         return CallNextHookEx(hHook,nCode,wParam,lParam); } int APIENTRY _tWinMain(HINSTANCE hInstance,  HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow) {         XInitXCGUI(); //初始化界面库         //.... 您的代码         hHook=SetWindowsHookEx(WH_CALLWNDPROC,CallWndProc,NULL,GetCurrentThreadId()); //安装钩子          XRunXCGUI(); //运行          UnhookWindowsHookEx(hHook); //卸载钩子 }


你可能感兴趣的:(server,IE,null,action,callback,internet)