荔园在线
荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀
[回到开始]
[上一篇][下一篇]
发信人: oopilix (PADRAD), 信区: Visual
标 题: [FR]VC-波形显示控件
发信站: 荔园晨风BBS站 (Tue May 13 20:24:43 2003), 站内信件
我像做一个波形显示控件,根据客户输入的数据即时绘出图形。我在接口中定义了
一个method,如下
STDMETHODIMP CChartCtl::PlotChart(double plot[], long num)
{
// TODO: Add your implementation code here
HDC hDC=GetDC();
RECT rect;
int oldx,oldy,newx,newy;
GetClientRect(&rect);
hBlackBrush= CreateSolidBrush(RGB(0,0,0));
SelectObject(hDC,hBlackBrush);
Rectangle(hDC,rect.left+60 ,rect.top+20 ,rect.right-40 ,rect.
bottom-40 );
hRedPen= CreatePen(PS_SOLID,1,RGB(255,0,0));
SelectObject(hDC,hRedPen);
for (int i=0; i<num; i++) {
newy = rect.top +20-((rect.bottom -40-rect.top
-20)*plot[i])/10;
newx = i*(rect.right -40-rect.left -60)/num+rect.left +60;
if (i==0)
MoveToEx(hDC, newx, newy, NULL);
else
MoveToEx(hDC, oldx, oldy, NULL);
LineTo(hDC, newx, newy);
oldx = newx;
oldy = newy;
}
ReleaseDC(hDC);
return S_OK;
}
编译通过,但是调用控件,并没有划出我希望得到的曲线,怎么会事呢?
你是如何调用这段语句的?对控件来说,要在方法中调用InvalidateControl()使
控件无效,来触发控件的OnDraw(),因此你的这个函数的调用要嵌入在OnDraw()中
:
void CChartCtl::OnDraw(.....)
{
...
PlotChart(plot[], num);
...
}
而plot[]和num送入控件后就要调用InvalidateControl()
我在我的程序中加入一个事件的确能通过的
LRESULT OnLButtonDblClk(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL&
bHandled)
{
// TODO : Add Code for message handler. Call DefWindowProc if
necessary.
WORD xPos = LOWORD(lParam);
WORD yPos = HIWORD(lParam);
HDC hDC;
HBRUSH hBrush;
HPEN hPen;
PAINTSTRUCT PtStr;
hDC=GetDC();
hPen=(HPEN)GetStockObject(BLACK_PEN);
hBrush=(HBRUSH)GetStockObject(DKGRAY_BRUSH);
SelectObject(hDC,hBrush);
SelectObject(hDC,hPen);
RoundRect(hDC,xPos,yPos,xPos+100,yPos+200,15,15);
ReleaseDC(hDC);
return 0;
}
--
※ 来源:·荔园晨风BBS站 bbs.szu.edu.cn·[FROM: 61.144.235.41]
[回到开始]
[上一篇][下一篇]
荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店