else
{
CDialogEx::OnPaint();
PAINTSTRUCT ps;
GetDlgItem(IDC_STATIC_PAINT)->GetClientRect(rectPaint);
CPaintDC Dc(GetDlgItem(IDC_STATIC_PAINT));
Dc.SetBkColor(RGB(0, 0, 0));
Dc.FillSolidRect(rectPaint,RGB(255,255,255));
//GetClientRect(rect);
CPen pen;
pen.CreatePen(PS_SOLID,2, RGB(0, 0, 0));
Dc.SelectObject(pen);
Dc.MoveTo(200, 15);
Dc.LineTo(200, 185);
//Dc.MoveTo(128, 160);
Dc.LineTo(600, 185);
Dc.MoveTo(200, 185);
Dc.LineTo(115, 255);
Dc.MoveTo(200, 15);
Dc.LineTo(195, 25);
Dc.MoveTo(200, 15);
Dc.LineTo(205, 25);
Dc.MoveTo(115, 255);
Dc.LineTo(118, 245);
Dc.MoveTo(115, 255);
Dc.LineTo(120, 258);
Dc.MoveTo(600, 185);
Dc.LineTo(590, 180);
Dc.MoveTo(600, 185);
Dc.LineTo(590, 190);
for (int i = 0; i < threadCount; i++)
{
Dc.MoveTo(200, 15);
Dc.LineTo(200+10*i, 190);
}
//pen.CreatePen(PS_SOLID, 10, RGB(0, 0, 0));
//Dc.SelectObject(pen);
for (int i = 0; i < dataLen; i++)
{
double angle = 45 + 0.167*i;
int x;
int y = dataNeeded[i] * sin(angle) / 100;
if(angle<90)
{
x = dataNeeded[i] * cos(angle) / 100;
Dc.SetPixel(240+x + 2 * cos(45), 140-y -2 * cos(45), RGB(0, 0, 255));
}
else
{
x = dataNeeded[i] * cos(abs(angle)) / 100;
Dc.SetPixel(240+x * cos(45), 140 + y + 2 * cos(45), RGB(0, 0, 255));
}
}
Dc.BitBlt(rectPaint->left, rectPaint->top , rectPaint->Width(), rectPaint->Height(), &Dc, 0, 0, SRCCOPY);
uj5u.com熱心網友回復:
實時刷圖沒有實作,但是當對話框最小化,最大化的時候,就可以出來了uj5u.com熱心網友回復:
CDialogEx::OnPaint(); 后 對話框里 所有 控制元件 都 會 被 Invalidate()等到 本對話框 OnPaint() 退出后 , 所有 控制元件 才重繪 (所以 本對話框 OnPaint() 里對控制元件的繪制 被 覆寫)
在 對話框 里 繪制 控制元件,
1 . OnPaint(); // 繪制 對話框 本身, 同時 Invalidate() 所有控制元件。
2 . 所有控制元件 UpdateWindow() ;// 使視窗 有效 !(即DC 有效)
3. 所有控制元件得到有效的 GetDC();
4. 繪制所有 控制元件 !
uj5u.com熱心網友回復:
/* InvalidateRect 的作用是無效視窗客戶區,發送低優先級的WM_PAINT訊息 UpdateWindow的作用是馬上重繪同時使客戶區有效。
注意下面的PaintWindow 函式,函式用GetDC得到設備環境句柄,這里就是關鍵 。
GetDC和BeginPaint不同,從GetDC回傳句柄之后 你可以用此句柄在客戶區任何地方繪圖,
不管是有效區還是無效區,同時GetDC不會使無效區有效化。所以 你把 UpdateWindow去掉了,
下面的PaintWindow仍然執行,只不過畫完圖之后你的子視窗控制元件客戶區已然是無效的,
這就導致系統發送一條WM_PAINT訊息到子視窗的視窗程序,默認的視窗程序會用畫刷填充,
這里應該是和背景色相同的畫刷 所以什么都顯示不了。
*/
void PaintTheBlock (HWND hCtrl, int iColor, int iFigure)
{
InvalidateRect (hCtrl, NULL, FALSE);//TRUE) ;
UpdateWindow (hCtrl) ;
PaintWindow (hCtrl, iColor, iFigure) ;
}
uj5u.com熱心網友回復:
建議從CStatic派生新類 處理 WM_PAINTuj5u.com熱心網友回復:
重繪下
uj5u.com熱心網友回復:
如果最小化后還原, 會繪制, 那只能說明, 你沒有呼叫重繪函式.你只需要在視窗類中呼叫一個invalidate函式就可以了.
當然, 這樣多半會出現閃屏的現象.
最好的辦法是在你繪制的時候, 直接GetClientDC, 直接在客戶區上繪制, 不使用OnPaint訊息回應. 當然, 為了視窗刷卡 新時, 繪制的東西還在, OnPaint中也是需要呼叫繪制來繪制你的圖.
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/60989.html
標籤:界面
上一篇:0x80004003 無效指標
