如何让一个按钮按下后不自动跳起来

taft 2004-10-08 01:15:45
我想实现一个按钮按下后就处于按下的状态,这样让一个过程运行,当按其他按钮的时候这个按钮就弹起来,如何实现呢?我利用Checkstate但当这个按钮失去焦点就自己弹起来了,怎么弄呢?谢谢
...全文
252 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
asphp 2004-10-10
  • 打赏
  • 举报
回复
蹭分
kugou123 2004-10-09
  • 打赏
  • 举报
回复
同意楼上的重载方法。
OriesMap 2004-10-09
  • 打赏
  • 举报
回复
同意daymist(土狼)的子类重载的办法。
shenailin 2004-10-08
  • 打赏
  • 举报
回复
daymist(土狼)说"封装一个BUTTON 子类,然后呢重载DrawItem,在其中根据你设定的状态量进行自绘,多好"
如下

CDC *pDC = CDC::FromHandle(lpDrawItemStruct->hDC);
CRect captionRect = lpDrawItemStruct->rcItem;
CRect rect = captionRect;
CBrush brush;
int nIconX, nIconY;
if (m_nState == SWITCHBUTTON_UP)
{
brush.CreateSolidBrush(::GetSysColor(COLOR_3DFACE));
pDC->FillRect(&rect, &brush);
pDC->Draw3dRect(&rect, ::GetSysColor(COLOR_3DHIGHLIGHT), ::GetSysColor(COLOR_3DDKSHADOW));
rect.DeflateRect(1, 1);
pDC->Draw3dRect(&rect, ::GetSysColor(COLOR_3DLIGHT), ::GetSysColor(COLOR_3DSHADOW));
nIconX = 0;
nIconY = 0;
}
else if (m_nState == SWITCHBUTTON_DOWN)
{
brush.CreateSolidBrush(::GetSysColor(COLOR_3DFACE));
pDC->FillRect(&rect, &brush);
pDC->Draw3dRect(&rect, ::GetSysColor(COLOR_3DDKSHADOW), ::GetSysColor(COLOR_3DHIGHLIGHT));
rect.DeflateRect(1,1);
pDC->Draw3dRect(&rect, ::GetSysColor(COLOR_3DSHADOW), ::GetSysColor(COLOR_3DLIGHT));
// make it look pressed
rect.top += 1;
// icontop += 1;
nIconX = 1;
nIconY = 1;
}
else if (m_nState == SWITCHBUTTON_SELECTED)
{
brush.CreateSolidBrush(::GetSysColor(COLOR_3DLIGHT));
pDC->FillRect(&rect, &brush);
pDC->Draw3dRect(&rect, ::GetSysColor(COLOR_3DDKSHADOW), ::GetSysColor(COLOR_3DHIGHLIGHT));
rect.DeflateRect(1,1);
pDC->Draw3dRect(&rect, ::GetSysColor(COLOR_3DSHADOW), ::GetSysColor(COLOR_3DLIGHT));
// make it look pressed
rect.top+= 1;
// icontop += 1;
nIconX = 0;
nIconY = 1;
}

brush.DeleteObject();

if(hIconIn != NULL)
pDC->DrawIcon( nIconX, nIconY, hIconIn );

// Read the button's title
CString sTitle;
GetWindowText(sTitle);
int nOldMode = pDC->SetBkMode(TRANSPARENT);
pDC->SetTextColor( RGB(255,0,0) );
int nHeighyt = pDC->DrawText(sTitle, -1, captionRect, DT_WORDBREAK | DT_CENTER | DT_CALCRECT);
pDC->SetBkMode( nOldMode );
//pDC->SelectObject(pOldPen);
ReleaseDC(pDC);
daymist 2004-10-08
  • 打赏
  • 举报
回复
封装一个BUTTON 子类,然后呢重载DrawItem,在其中根据你设定的状态量进行自绘,多好
SetpByStep 2004-10-08
  • 打赏
  • 举报
回复
CButton myButton;

// Create an auto 3-state button.
myButton.Create(_T("My button"), WS_CHILD|WS_VISIBLE|BS_AUTO3STATE,
CRect(10,10,100,30), pParentWnd, 1);

// Set the check state to indeterminate.
myButton.SetCheck( BST_INDETERMINATE );
flyelf 2004-10-08
  • 打赏
  • 举报
回复
SetCheck
woodywjl 2004-10-08
  • 打赏
  • 举报
回复
你可以用代码设置
pButton->SetState(1);是按下
pButton->SetState(0);是没有按下
不过,还是楼上的方法比较好,因为我说的这个有一些缺点
不过,楼上的好像也并非完美
lixiaosan 2004-10-08
  • 打赏
  • 举报
回复
放一个checkbox到界面上,设置其风格为push_like

15,978

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧