VC中如何立即更新窗口 VC 如何更新窗口

vc++\u5982\u4f55\u5237\u65b0VIEW\u7a97\u53e3

1\u3001\u5b9e\u73b0\u6a21\u5f0f\u5bf9\u8bdd\u6846\u7684OnOk()\u51fd\u6570\uff0c\u5728\u5176\u4e2d\u6dfb\u52a0\u4e0b\u9762\u7684\u4ee3\u7801\u5c31\u53ef\u4ee5\u4e86\uff1a
\uff08(C***View)(AfxGetMainWnd()->GetActiveView())\uff09->Invalidate();
\u5176\u4e2dC***View\u66ff\u6362\u4e3a\u4f60\u81ea\u5df1\u7684View\u7c7b\u7684\u540d\u5b57\u3002

2\u3001\u8c03\u7528Invalidate()\u53ea\u662f\u5b9e\u73b0\u4e86\u5237\u65b0\u663e\u793a\u800c\u5df2\uff0c\u81f3\u4e8e\u5982\u4f55\u5b9e\u73b0\u56fe\u7247\u5927\u5c0f\u7684\u66f4\u65b0\uff0c\u4ecd\u9700\u8981\u5176\u4ed6\u4ee3\u7801\uff08\u6bd4\u5982\u5728View\u7c7b\u4e2d\u6dfb\u52a0\u4ee3\u8868\u56fe\u7247\u5927\u5c0f\u7684\u6210\u5458\u53d8\u91cf\uff0c\u5728OnDraw()\u4e2d\u6309\u7167\u6210\u5458\u53d8\u91cf\u7ed8\u5236\u56fe\u7247\uff0c\u5728OnOK()\u4e2d\u66f4\u65b0View\u6210\u5458\u53d8\u91cf\u7684\u503c\uff09\u3002

void Invalidate( BOOL bErase = TRUE ); \u8be5\u51fd\u6570\u7684\u4f5c\u7528\u662f\u4f7f\u6574\u4e2a\u7a97\u53e3\u5ba2\u6237\u533a\u65e0\u6548\u3002\u7a97\u53e3\u7684\u5ba2\u6237\u533a\u65e0\u6548\u610f\u5473\u7740\u9700\u8981\u91cd\u7ed8\uff0c\u4f8b\u5982\uff0c\u5982\u679c\u4e00\u4e2a\u88ab\u5176\u5b83\u7a97\u53e3\u906e\u4f4f\u7684\u7a97\u53e3\u53d8\u6210\u4e86\u524d\u53f0\u7a97\u53e3\uff0c\u90a3\u4e48\u539f\u6765\u88ab\u906e\u4f4f\u7684\u90e8\u5206\u5c31\u662f\u65e0\u6548\u7684\uff0c\u9700\u8981\u91cd\u7ed8\u3002\u8fd9\u65f6Windows\u4f1a\u5728\u5e94\u7528\u7a0b\u5e8f\u7684\u6d88\u606f\u961f\u5217\u4e2d\u653e\u7f6eWM_PAINT\u6d88\u606f\u3002MFC\u4e3a\u7a97\u53e3\u7c7b\u63d0\u4f9b\u4e86WM_PAINT\u7684\u6d88\u606f\u5904\u7406\u51fd\u6570OnPaint\uff0cOnPaint\u8d1f\u8d23\u91cd\u7ed8\u7a97\u53e3\u3002\u89c6\u56fe\u7c7b\u6709\u4e00\u4e9b\u4f8b\u5916\uff0c\u5728\u89c6\u56fe\u7c7b\u7684OnPaint\u51fd\u6570\u4e2d\u8c03\u7528\u4e86OnDraw\u51fd\u6570\uff0c\u5b9e\u9645\u7684\u91cd\u7ed8\u5de5\u4f5c\u7531OnDraw\u6765\u5b8c\u6210\u3002\u53c2\u6570bErase\u4e3aTRUE\u65f6\uff0c\u91cd\u7ed8\u533a\u57df\u5185\u7684\u80cc\u666f\u5c06\u88ab\u64e6\u9664\uff0c\u5426\u5219\uff0c\u80cc\u666f\u5c06\u4fdd\u6301\u4e0d\u53d8\u3002


UpdateWindow( )\u7684\u4f5c\u7528\u662f\u4f7f\u7a97\u53e3\u7acb\u5373\u91cd\u7ed8\u3002\u8c03\u7528Invalidate\u7b49\u51fd\u6570\u540e\u7a97\u53e3\u4e0d\u4f1a\u7acb\u5373\u91cd\u7ed8\uff0c\u8fd9\u662f\u7531\u4e8eWM_PAINT\u6d88\u606f\u7684\u4f18\u5148\u7ea7\u5f88\u4f4e\uff0c\u5b83\u9700\u8981\u7b49\u6d88\u606f\u961f\u5217\u4e2d\u7684\u5176\u5b83\u6d88\u606f\u53d1\u9001\u5b8c\u540e\u624d\u80fd\u88ab\u5904\u7406\u3002\u8c03\u7528UpdateWindow\u51fd\u6570\u53ef\u4f7fWM_PAINT\u88ab\u76f4\u63a5\u53d1\u9001\u5230\u76ee\u6807\u7a97\u53e3\uff0c\u4ece\u800c\u5bfc\u81f4\u7a97\u53e3\u7acb\u5373\u91cd\u7ed8\u3002


UpdateData() \u662fMFC\u7684\u7a97\u53e3\u51fd\u6570\uff0c\u7528\u6765\u5237\u65b0\u6570\u636e\u7684\u3002\u9ed8\u8ba4\u662fTRUE
UpdateData(TRUE) \u2014\u2014\u5237\u65b0\u63a7\u4ef6\u7684\u503c\u5230\u5bf9\u5e94\u7684\u53d8\u91cf\u3002 \u5373\uff1a\u63a7\u4ef6\u7684\u503c\u2014>\u53d8\u91cf\u3002 UpdateData(FALSE) \u2014\u2014 \u62f7\u8d1d\u53d8\u91cf\u503c\u5230\u63a7\u4ef6\u663e\u793a\u3002 \u5373\uff1a\u53d8\u91cf\u503c\u2014>\u63a7\u4ef6\u663e\u793a\u3002
\u4f8b\u5982\uff0c\u7a97\u53e3\u4e2d\u7528 DDX_Text(pDX, IDC_EDIT1, m_usercode);
\u5c06IDC_EDIT1\u7f16\u8f91\u6846\u63a7\u4ef6\u4e0em_usercode\u53d8\u91cf\u505a\u4e86\u5173\u8054\uff0c\u5982\u679c\u4fee\u6539m_usercode\u4e4b\u540e\u8981\u60f3\u5bf9\u5e94\u63a7\u4ef6\u663e\u793a\u66f4\u6539\uff0c\u5219\u9700\u8981\u8c03\u7528UpdateData(FALSE);\u53cd\u4e4b\u5728IDC_EDIT1\u7684oneditchanged()\u4e2d\u9700\u8981\u52a0\u5165UpdateData(TRUE);
\u7b80\u5355\u5730\u8bf4\uff0c\u5982\u679cUpdatedata(TRUE) == \u5c06\u63a7\u4ef6\u7684\u503c\u8d4b\u503c\u7ed9\u6210\u5458\u53d8\u91cf\uff0c\u5373\u4ece\u7a97\u53e3\u7f16\u8f91\u6846\u4e2d\u8bfb\u5165\u6570\u636e\uff1bUpdatedata(FALSE) == \u5c06\u6210\u5458\u53d8\u91cf\u7684\u503c\u8d4b\u503c\u7ed9\u63a7\u4ef6\uff0c\u5c06\u6570\u636e\u4ece\u7a97\u53e3\u663e\u793a\u3002

InvalidateRect():
该函数向指定的窗体添加一个矩形,然后窗口客户区域的这一部分将被重新绘制。
BOOL InvalidateRect(
HWND hWnd, // handle of window with changed update region
CONST RECT *lpRect, // address of rectangle coordinates
BOOL bErase // erase-background flag
);
参数:
hWnd:要更新的客户区所在的窗体的句柄。如果为NULL,则系统将在函数返回前重新绘制所有的窗口, 然后发送 WM_ERASEBKGND 和 WM_NCPAINT 给窗口过程处理函数。
lpRect:无效区域的矩形代表,它是一个结构体指针,存放着矩形的大小。如果为NULL,全部的窗口客户区域将被增加到更新区域中。
bErase:指出无效矩形被标记为有效后,是否重画该区域,重画时用预先定义好的画刷。当指定TRUE时需要重画。
返回值: 函数成功则返回非零值,否则返回零值。
说明:被标记为无效矩形的区域直到WM_PAINT消息被处理完之后才会消失,或者使用ValidateRect(),ValidateRgn()函数来使之有效。当应用程序的消息队列中为空时,并且窗体要更新的区域非空时,系统会发送一个WM_PAINT消息到窗体。

不要再OnDraw函数中加Invalidate(),应该在ondraw之前加。

  • 鍦╒C涓浣寮鸿揩褰撳墠绐楀彛鍒锋柊
    绛旓細::InvalidateRect( hWnd, NULL );::UpdateWindow( hWnd );
  • 鍏充簬VC缂栫▼绐楀彛閲嶇粯
    绛旓細浣嗘槸鐜板疄鐨勬枃瀛椾笉灞炰簬绐楀彛鑳屾櫙锛屼笉浼氬啀閲嶇粯鏄噸鏂板~鍏呯獥鍙o紝鎵浠ュ繀椤诲湪姣忔ONPAINT鏃堕噸鏂扮粯鍒朵竴閬嶃傚叧浜庣獥鍙i噸缁樺彂鐢熺殑鏃堕棿锛岀畝鍗曟潵璇村彲鑳藉湪浠讳綍鏃跺欏彂鐢熴傛瘮濡傛敼鍙樼獥鍙eぇ灏忥紝绐楀彛鏈灏忓寲鍚庡湪鏈澶у寲锛屽彟澶栫殑绐楀彛浠庡綋鍓嶇獥鍙e墠绉昏繃锛岀獥鍙e脊鍑鸿彍鍗曠瓑绛夛紝鍙﹀杩樻湁鍙兘鏄敤鎴疯嚜宸鏇存柊绐楀彛鍐呭锛屾垨鑰呰嚜宸辫绐楀彛閲嶇粯绛夈...
  • 濡備綍鐢VC++6.0鍒涘缓windows绐楀彛绋嬪簭?
    绛旓細1銆佸惎鍔vc++6.0銆2銆佸湪鏂囦欢鑿滃崟閲屽崟鍑绘柊寤恒3銆佸湪寮瑰嚭鐨绐楀彛閲鍗曞嚮mfc appwizard (exe)銆4銆佸湪鍙宠竟鐨勫伐绋嬪悕绉伴噷杈撳叆绋嬪簭鍚嶏紝渚嬪firstc銆5銆佸崟鍑荤‘瀹氾紝鍦ㄥ脊鍑虹殑绐椾綋閲岄夋嫨鍩烘湰瀵硅瘽妗嗭紝鍗曞嚮瀹屾垚锛屽崟鍑荤‘瀹氥6銆佽繖鏃跺凡缁忕敓鎴愪簡涓涓獥浣擄紝涓や釜鎸夐挳鐨勭獥鍙g▼搴忥紝鍙互杩愯銆7銆佸湪杩欎釜绐椾綋涓婄户缁坊鍔犳坊鍔犻渶瑕...
  • vc++6.0鐜涓媘fc鐨勫璇濇鏇存柊UpdateData(FALSE)闂
    绛旓細浣犵殑myoutwd.UpdateData蹇呴』鍦╩youtwd瀵瑰簲鐨绐楀彛瀛樺湪鏃舵墠鑳芥垚鍔燂紝鍚﹀垯灏变細debugAssert 浣犲叧闂璇濇涔嬪悗锛宮youtwd鐨勭獥鍙i攢姣侊紝浣犲嵈杩樺湪view瀹氭椂鏇存柊锛屽洜姝ゅ紩鍙戞鏂█锛屼綘鍙互鏈変袱涓柟娉曡В鍐宠闂锛氫竴銆佸叧闂璇濇鏃跺叧闂璿iew鐨勫畾鏃跺櫒KillTimer 浜屻佸垽鏂獥鍙f槸鍚︽湁鏁堬細if(::IsWindow(myoutwd.m_hWnd))myoutwd....
  • 1.鍦ㄧ敤VC++6.0鍒涘缓绐楀彛鏃,鎴戠殑姝ラ鏄繖鏍风殑(璺熺潃瀛欓懌鏁欑▼閲瀛︾殑)銆1...
    绛旓細hWnd = CreateWindow("XP","绐楀彛",WS_OVERLAPPEDWINDOW,100,100,500,500,NULL,NULL,hInstance,NULL);//鍒涘缓绐楀彛,鍙傝僊SDN ShowWindow(hWnd,SW_SHOWNORMAL);//鏄剧ず UpdateWindow(hWnd);//鏇存柊绐楀彛 while(GetMessage(&msg,NULL,0,0)){//娑堟伅寰幆 TranslateMessage(&msg);DispatchMessage(&msg);} retur...
  • vc++6.0鐨勮繍琛岀晫闈㈣兘鍚﹁缃负绐楀彛妯″紡?
    绛旓細浣犺繖鏍峰惂,浣犺繍琛VC++鐨勬椂鍊欓偅涓绐楀彛鏄叏灞忕殑璇,浣犲氨鎸変笅ALT+ENTER閿,鐒跺悗杩欎釜鏃跺欏氨鏄獥鍙fā寮忎簡,鐒跺悗浣犲啀鐐瑰乏涓婅鐨"鎺у埗鎸夐挳",鐒跺悗浼氬脊鍑轰竴涓彍鍗,浣犲氨閫夋嫨"灞炴",杩欎釜鏃跺欏氨浼氬脊鍑轰竴涓璇濇閫夋嫨"閫夐」"杩欎釜閫夐」鍗,浣犱細鐪嬪埌鏈変竴涓"鏄剧ず閫夐」"閲岄潰鏈"绐楀彛"鍜"鍏ㄥ睆鏄剧ず"浣犻夋嫨"绐楀彛",鐒跺悗鐐圭‘瀹...
  • MFC涓殑invalidate鍑芥暟鏄粈涔堟剰鎬濆晩?
    绛旓細绫讳技鐨勮繕鏈変笅闈㈢殑涓や釜鍑芥暟锛歎pdateWindow()鍙悜绐椾綋鍙戦乄M_PAINT娑堟伅锛屽湪鍙戦佷箣鍓嶅垽鏂璆etUpdateRect(hWnd,NULL,TRUE)鐪嬫湁鏃犲彲缁樺埗鐨勫鎴峰尯鍩燂紝濡傛灉娌℃湁锛屽垯涓嶅彂閫乄M_PAINT銆俁edrawWindow()鍒欐槸鍏锋湁Invalidate()鍜孶pdateWindow()鐨勫弻鐗规с傚0鏄庣獥鍙g殑鐘舵佷负鏃犳晥锛屽苟绔嬪嵆鏇存柊绐楀彛锛岀珛鍗宠皟鐢╓M_PAINT娑堟伅澶勭悊銆
  • vc6.0宸ョ▼绐楀彛绋嬪簭濡備綍鏂板缓
    绛旓細--鈥滄柊寤衡濄傞《閮ㄩ夋嫨鈥滃伐绋嬧濓紝閫夋嫨鈥淲in32Application鈥濄傚~鍐欌滃伐绋嬪悕绉扳濈劧鍚庘滅‘瀹氣濄傞夋嫨鈥滀竴涓吀鍨嬬殑鈥淗elloWord!鈥濈▼搴忊濆畬鎴愶紝寮瑰嚭绐楀彛鐩存帴鈥滅‘璁も濄傚簳閮ㄩ夋嫨鈥淔ileViwer鈥濋噷闈㈡槸宸ョ▼鏂囦欢銆傚伐鍏疯彍鍗曚腑鈥滅粍浠垛--鈥滄墽琛孾..exe]鈥濓紝寮瑰嚭鐨勭獥鍙b滅‘璁も濄傝繖鏍锋垜浠氨鎵撳紑涓涓獥鍙g▼搴忎簡銆vc| ...
  • VC++涓浣寮瑰嚭绐楀彛
    绛旓細鍒囨崲鍒拌祫婧愯鍥撅紝鏂板缓涓涓璇濇锛宑trl+w涓鸿繖涓璇濇娣诲姞鍏宠仈绫伙紙鍋囪绫诲悕涓篊MeDialog锛.鍦ㄩ渶瑕佸脊鍑绐楀彛鐨勭被婧愭枃浠朵腑娣诲姞#include "MeDialog.h"(瀵硅瘽妗嗙殑绫诲ご鏂囦欢).鍦ㄩ渶瑕佸脊鍑虹獥鍙g殑鍦版柟娣诲姞浠g爜锛欳MeDialog medialog;medialog.DoModal()锛涘氨ok浜嗗晩 锛
  • delphi 脳脳脳Delphi涓浣瀹炵幇VC涓Ondraw()鐨勮嚜鍔ㄥ埛鏂板姛鑳(
    绛旓細Form1鐨凮nPaint浜嬩欢锛屾槸鍦绐楀彛鐨勬瘡娆¢噸鐢绘椂瑙﹀彂锛歱rocedure TForm1.FormPaint(Sender: TObject);var MyCanvas: TCanvas;begin MyCanvas Form1.Canvas; MyCanvas.Ellipse(1, 1, 100, 100);end; 鏌ョ湅鍘熷笘>>
  • 扩展阅读:vue打开一个新的窗口 ... ae下面的面板不见了 ... 浏览器怎么打开链接 ... vc++更新 ... vue强制更新页面 ... 为什么visual c6.0打不开 ... vue弹出新窗口 ... vivo系统更新安装包在哪 ... vb立即窗口怎么打开 ...

    本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网