• 全部
  • VC综合技术
  • 互联网技术
  • MFC AppLauncher
  • .NET 技术
  • 界面
  • 进程
  • 算法
  • 硬件/系统
  • 数据库
  • VC++技术资源

关于派生cbutton产生的问题

xiaoc 2002-05-17 01:09:34
我要做一个异型的按钮,于是先从cbutton派生出一个类,可我发现,在cmybutton 中用pDC画图时可以画出按钮,就是说我在一个按钮上画一幅图的话,或者textout一些字的话,如果按钮上显示不下,它会在背景上显示

这个我理解的CWnd的概念有些冲突,为什么?谁能告诉我,谢谢
...全文
11 点赞 收藏 20
写回复
20 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
xiaoc 2002-05-20
楼上没有明白我的意思,

我并不是在乎字符串,而是异型窗口

再说了,现在不只是做这个按钮的问题,问题是为什么pDC会把东西画到窗口以外

回复
zxs218 2002-05-20
使用DrawTextEx, 设置lprc参数即可。

DrawTextEx
The DrawTextEx function draws formatted text in the specified rectangle.

int DrawTextEx(
HDC hdc, // handle to DC
LPTSTR lpchText, // text to draw
int cchText, // length of text to draw
LPRECT lprc, // rectangle coordinates
UINT dwDTFormat, // formatting options
LPDRAWTEXTPARAMS lpDTParams // more formatting options
);
回复
Anaki 2002-05-20
呵呵,奇怪.

还需要更多信息做判断:
你的异形按钮如何得到的? SetWindowRgn?
你用于绘画的屏幕设备句柄如何得到的? 通过 DRAWITEMSTRUCT?
回复
xiaoc 2002-05-20
呵呵,不好用

还有好办法嘛?
回复
gboy 2002-05-20
try

CDC::SelectClipRgn
回复
ajp2002 2002-05-20
heihei
回复
zxs218 2002-05-20
需要通过LPDRAWITEMSTRUCT中的rcItem来做限制。
回复
zxs218 2002-05-20
需要通过LPDRAWITEMSTRUCT中的rcItem来做限制。
回复
zxs218 2002-05-20
BOOL CALLBACK OwnDrawProc(HWND hDlg, UINT message, WPARAM wParam,
LPARAM lParam)
{
HDC hdcMem;
LPDRAWITEMSTRUCT lpdis;

switch (message)
{
case WM_INITDIALOG:

// hinst, hbm1 and hbm2 are defined globally.
hbm1 = LoadBitmap((HANDLE) hinst, "OwnBit1");
hbm2 = LoadBitmap((HANDLE) hinst, "OwnBit2");
return TRUE;

case WM_DRAWITEM:
lpdis = (LPDRAWITEMSTRUCT) lParam;
hdcMem = CreateCompatibleDC(lpdis->hDC);

if (lpdis->itemState & ODS_SELECTED) // if selected
SelectObject(hdcMem, hbm2);
else
SelectObject(hdcMem, hbm1);

// Destination
StretchBlt(
lpdis->hDC, // destination DC
lpdis->rcItem.left, // x upper left
lpdis->rcItem.top, // y upper left

// The next two lines specify the width and
// height.
lpdis->rcItem.right - lpdis->rcItem.left,
lpdis->rcItem.bottom - lpdis->rcItem.top,
hdcMem, // source device context
0, 0, // x and y upper left
32, // source bitmap width
32, // source bitmap height
SRCCOPY); // raster operation

DeleteDC(hdcMem);
return TRUE;

case WM_COMMAND:
if (wParam == IDOK
|| wParam == IDCANCEL)
{
EndDialog(hDlg, TRUE);
return TRUE;
}
if (HIWORD(wParam) == BN_CLICKED)
{
switch (LOWORD(wParam))
{
case IDC_OWNERDRAW:

// application-defined processing

break;
}
}
break;

case WM_DESTROY:
DeleteObject(hbm1); // delete bitmaps
DeleteObject(hbm2);

break;

}
return FALSE;
UNREFERENCED_PARAMETER(lParam);
}
回复
xiaoc 2002-05-20
我在drawitem中画
回复
xiaoc 2002-05-20
大家用qq和我联系吧,顺便交个朋友

qq:63082391

msn:ProgramerXiaoc@hotmail.com
回复
zxs218 2002-05-20
你在那个函数里绘制的?
回复
Anaki 2002-05-20
可能是你的按钮剪裁有问题或者用于绘图的设备(DC)没选好
回复
xiaoc 2002-05-19
他不能作异型窗口

再说了,现在不只是做这个按钮的问题,问题是为什么pDC会把东西画到窗口以外

高人救我
回复
webber84 2002-05-18
用CBitmapButton不行吗?
回复
xiaoc 2002-05-18
其实不难,我只是想创建一个异型的按钮,然后往上贴图,但按钮时异型了,贴的图老是整整方方的,按钮没有的地方也贴上图了
回复
freelybird 2002-05-17
你要的啥效果???
回复
tianlinyi 2002-05-17
:)
回复
xiaoc 2002-05-17
在cmybutton中的drawitem和其他能画的地方都试了

肯定没在背景上的pdc画
回复
Hover 2002-05-17
你在哪进行绘制?
回复
相关推荐
发帖
VC/MFC
创建于2007-09-28

1.5w+

社区成员

VC/MFC相关问题讨论
申请成为版主
帖子事件
创建了帖子
2002-05-17 01:09
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……