在dll中怎样获得主应用程序句柄 100

在dll中我创建了两个接口函数,一个是画图,另一个是在图上画点。因为图比较大,我在图上画点时需要获得窗口滚动条位置,怎样获得主应用程序的窗口句柄呢?还有,画图和画点的CD... 在dll中我创建了两个接口函数,一个是画图,另一个是在图上画点。因为图比较大,我在图上画点时需要获得窗口滚动条位置,怎样获得主应用程序的窗口句柄呢?还有,画图和画点的CDC* pDC怎样获得呢? 展开
 我来答
在蕲州古城冲浪的金鱼草
2010-10-24 · TA获得超过460个赞
知道小有建树答主
回答量:755
采纳率:0%
帮助的人:596万
展开全部
用FindWindow API函数,或者你在调用画点函数时传一个窗口句柄也可以。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
time_edge
2010-11-02 · TA获得超过773个赞
知道小有建树答主
回答量:753
采纳率:0%
帮助的人:736万
展开全部
1.做DLL尽量不要用MFC,如果包含了MFC才能用CDC 类,所以建议使用HDC这是原始句柄,否则在DLL内用CDC这类会使DLL很大.传递句柄:pDC->m_hDC

2.窗口句柄用HWND,直接传入this->m_hWnd,没必要使用CWnd类

事实上不用传DC的,直接传HWND后,使用以下函数得到HDC即可:
HDC hDestDC = ::GetDC(HWND hWnd);//传入窗口句柄即可.
HDC hDC = ::CreateCompatibleDC(hDestDC);//这样做内存DC即可.
//这里绘图之类的相关............
::ReleaseDC(hDestDC);
::DeleteDC(hDC);

3.DLL建议做成类方便.
#define DLL_FUNCTION __declspec(dllexport)
class DLL_FUNCTION CDrawEx
{
public:
Draw(HWND hWnd);
//.....
};

//给个函数参考:
void CImgList::Draw(HDC hDC)
{
int nYpos = 4;
HBITMAP bmMonochrome = CreateCompatibleBitmap(hDC, 480,200);
RECT rtItem;
rtItem.left = 0;rtItem.top = 0;
rtItem.right = 480; rtItem.bottom = 200;

if(bmMonochrome){
HDC hMemDC = CreateCompatibleDC(hDC);
HBITMAP OldBitmap = (HBITMAP)SelectObject(hMemDC, bmMonochrome);
FillRect(hMemDC, &m_rtBmSize, (HBRUSH)GetStockObject(WHITE_BRUSH) );
SetBkMode(hMemDC, TRANSPARENT);
SetTextColor(hMemDC, RGB(0,0,0));
int m_nItem = 200;
for(int nCur = m_nItem ; nCur < m_nItem + MAX_ITEM; nCur++){
MoveToEx(hMemDC, 0, rtItem.top, NULL);
LineTo(hMemDC, 480, rtItem.top);
DrawText(hMemDC, m_szData[nCur], wcslen(m_szData[nCur]), &rtItem, DT_CENTER | DT_VCENTER);
OffsetRect(&rtItem, 0, ITEM_HEIGHT);
}
// printf("top:%d\n", m_nTop);
BitBlt(hDC,0, 0, m_rtClient.right, m_rtClient.bottom, hMemDC, 0, m_nOffset, SRCCOPY);

SelectObject(hMemDC, OldBitmap);
DeleteObject(bmMonochrome );
DeleteDC(hMemDC);
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
yinhuan99
2010-10-27 · 超过27用户采纳过TA的回答
知道答主
回答量:55
采纳率:0%
帮助的人:34.3万
展开全部
HWND hWnd; // 消息发送窗口

class __declspec(dllexport) CXXXDLL
{
public:
CXXXDLL();
~CXXXDLL();
public:
void SetHwnd(HWND hWnd); //设置接收消息的窗口句柄
}

void CXXXDLL::SetHwnd(HWND handleWnd)
{
hWnd = handleWnd;
}

窗口 调用 动态库的SetHwnd 函数,将窗口句柄传给动态库, pDC 获得的方式也可以这样
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式