|
标尺功能实现方法:
*调用Tool_opr.dll动态库。
*代码调用:
1.在Frame窗口类的头文件中定义:
public:
CRuleSplitter m_Splitter;
2、在Frame 的
::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
{
m_Splitter.Initalize(this,RUNTIME_CLASS(CTestFrameView),lpcs,pContext);
//若开发者的程序为切分视结构,则调用:
m_Splitter.Initalize(&m_wndSplitter,RUNTIME_CLASS(CTestFrameView),lpcs,pContext,m_wndSplitter.IdFromRowCol(0, 1));
}
3、在view的ondraw中调用
int *ipscreenPnts;
double *dpGridpnts;
int iNum,i;
D_DOT ddTmp;
CPoint ptTmp;
CRuleSplitter *par =(CRuleSplitter *)GetParent();
if(par->IsKindOf( RUNTIME_CLASS( CRuleSplitter ) ))
{
if(par->GetSafeHwnd())
{
D_RECT drc;
RECT rc;
_GetWinDispRect(&drc);
GetClientRect(&rc);
ClientToScreen(&rc);
par->SetPicScreenMetrics(rc);
par->SetRange(drc.xmax,drc.xmin,drc.ymax,drc.ymin);
if (par->AdjustXGridArray(&ipscreenPnts,&dpGridpnts,&iNum))
{
for(i=0;i<iNum;i++)
{
ddTmp.x = dpGridpnts;
ddTmp.y = DEF_PIXEL;
_LpToWp(&ddTmp,&ptTmp);
ClientToScreen(&ptTmp);
ipscreenPnts = ptTmp.x;
}
}
if (par->AdjustYGridArray(&ipscreenPnts,&dpGridpnts,&iNum))
{
for(i=0;i<iNum;i++)
{
ddTmp.x = DEF_PIXEL;
ddTmp.y = dpGridpnts;
_LpToWp(&ddTmp,&ptTmp);
ClientToScreen(&ptTmp);
ipscreenPnts = ptTmp.y;
}
}
par->UpdateRuler();
}
}
4、在PreTranslateMessage(MSG* pMsg)中调用
BOOL CTestFrameView: reTranslateMessage(MSG* pMsg)
{
CRuleSplitter *par =(CRuleSplitter *)GetParent();
if(par->IsKindOf( RUNTIME_CLASS( CRuleSplitter ) ))
{
if(par->GetSafeHwnd())
{
par->RelayMsg(pMsg);
}
}
return CGisEditView::PreTranslateMessage(pMsg);
} |
|