描述:
请问各位:
1、在ActiveX中如何得到控件自己的指针,就象是Dialog的窗口指针一样(AfxGetApp()->GetMainWnd())
2、在ActiveX控件中是否可以实现象在普通窗体中一样的使用鼠标划线功能(主要通过LMouseDown、LMouseUp和MouseMove加DC),如果刻意,如何实现?
分数不够可以再加!!!!
解决方案1:
不用取,直接用成员m_hWnd
解决方案2: 在HRESULT OnDraw(ATL_DRAWINFO& di)
di.hdcDraw这个就dc句柄,你可以通过它调用GDI函数
可以得到指针
必须在设置m_bWindowOnly = TRUE;(在构造函数中)
然后用get_window即可,(注意返回的是long ,要进行强制转换)
关于第二项是可以的,只要上面的实现了就好说了.
1.取得ID或者pWnd来操作
CWnd * pWnd = this->GetFocus();
m_nPicDeviceID = (long)(pWnd->GetDlgCtrlID());
2。不知道你说的刻意是什么意思
如果只是移动控件,MoveWindow久可以了
如果要表示移动画个空心矩形,
::SelectObject(dc.m_hDC,(HBRUSH)GetStockObject(NULL_BRUSH));
::Rectangle(dc.m_hDC,m_Rect.left,m_Rect.top,m_Rect.right,m_Rect.bottom);
如果防止闪烁用异或或者内存COPY就可以了
如果想在控件里面绘图重写一下绘图部分就可以了,示例:
void CPicDevice::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{
// TODO: Add your code to draw the specified item
//AfxMessageBox("CPicDevice::DrawItem!");
TRACE("CPicDevice::DrawItem Begin!\n");
CDC* pDC = CDC::FromHandle(lpDrawItemStruct->hDC);
CRect rcItem(lpDrawItemStruct->rcItem);
CRect rClient(rcItem);
CRect rText;
CPoint Pt(((rcItem.Width() - 32) /2 ), rcItem.top + 15);
pCONTENT_ITEMS pContents = &m_pContents[lpDrawItemStruct->itemID];
// HICON hIcon = pContents->hIcon;//pContents->nImageID);
HICON hIcon = m_hIcon;//AfxGetApp()->LoadIcon(IDR_MAINFRAME);
pContents->strText=m_name.GetBuffer(m_name.GetLength());//m_name;
rClient.DeflateRect(5,10);
rcItem.CopyRect(rClient);
rText.CopyRect(rClient);
rText.top += 40;
pDC->SetBkMode(TRANSPARENT);
if (lpDrawItemStruct->itemAction & ODA_DRAWENTIRE)
{
pDC->DrawIcon(Pt, hIcon);
pDC->DrawText(pContents->strText, rText, DT_CENTER|DT_WORDBREAK);
}
/*
if (m_bLBDown)
{
Pt.x += 2;
Pt.y += 2;
rcItem.OffsetRect(2,2);
rText.OffsetRect(2,2);
}
*/
if ((lpDrawItemStruct->itemState & ODS_SELECTED) &&
(lpDrawItemStruct->itemAction & (ODA_SELECT | ODA_DRAWENTIRE)))
{
if (FALSE)
{
pDC->FillSolidRect(rClient,GetSysColor(COLOR_BTNFACE));
if (m_bLBDown)
pDC->Draw3dRect(rClient,GetSysColor(COLOR_3DSHADOW), GetSysColor(COLOR_BTNHIGHLIGHT));
else
pDC->Draw3dRect(rClient,GetSysColor(COLOR_BTNHIGHLIGHT),GetSysColor(COLOR_3DSHADOW));
}
pDC->DrawIcon(Pt, hIcon);
pDC->DrawText(pContents->strText, rText, DT_CENTER|DT_WORDBREAK);
}
if (!(lpDrawItemStruct->itemState & ODS_SELECTED) &&
(lpDrawItemStruct->itemAction & ODA_SELECT))
{
pDC->FillSolidRect(rClient,GetSysColor(COLOR_WINDOW));
pDC->DrawIcon(Pt, hIcon);
pDC->DrawText(pContents->strText, rText, DT_CENTER|DT_WORDBREAK);
}
m_name.ReleaseBuffer();
}