| 编程中国 | 业界新闻 | 技术文章 | 视频教程 | 下载频道 | 程序源码 | 个人空间 | 编程论坛
全能ASP/PHP/ASP.NET主机,支持月付专业 MSSQL 数据库空间,支持月付专业 MySQL 数据库空间,支持月付赛孚耐:软件保护加密专家
身份认证令牌USB KEY   
共有 1212 人关注过本帖
标题:MFC对话框按钮,怎么弄成WINDOWS主题的样式?
收藏  订阅  推荐  打印 
kkqq
Rank: 2
等级:注册会员
帖子:73
积分:880
注册:2008-2-15
MFC对话框按钮,怎么弄成WINDOWS主题的样式?

MFC对话框按钮,怎么弄成WINDOWS主题的样式?
我编了一个MFC程序,程序里面对话框上的按钮都是像win98里那种的灰色的方块,很难看。怎么把它弄成winXP里的按钮样式?
搜索更多相关主题的帖子: MFC对话框  WINDOWS主题  按钮  样式  方块  
2008-2-16 03:13
kkqq
Rank: 2
等级:注册会员
帖子:73
积分:880
注册:2008-2-15

然道没人知道吗~~~~
2008-2-16 10:54
余来
Rank: 12Rank: 12Rank: 12
等级:贵宾
威望:26
帖子:954
积分:10250
注册:2006-8-13

重绘拉
重再DrawItem,并加BS_OWNDRAW(好象是这个风格,可能其中字母错乱 )风格.

2008-2-16 15:18
kkqq
Rank: 2
等级:注册会员
帖子:73
积分:880
注册:2008-2-15

以下是引用 余来 在 2008-2-16 15:18 的发言:

重绘拉
重再DrawItem,并加BS_OWNDRAW(好象是这个风格,可能其中字母错乱 )风格.
先谢谢版主回答~~

不过~~我还是不太明白呀~~能具体说明一下吗?~~或给个教程~~
2008-2-16 23:56
kkqq
Rank: 2
等级:注册会员
帖子:73
积分:880
注册:2008-2-15
顺便问一下版主~~这种按钮是如何做的~~还有那背景~~

这是我在论坛里下的一个计算器~~
是版主您有改过~~
那个按钮是哪个代码在起作用呀~~~~~能提供一下吗?~~


我下的就在这贴拿的~~
http://bbs.bccn.net/viewthread.php?tid=144941&highlight=%E8%AE%A1%E7%AE%97%E5%99%A8
天下第二刀的处女作~~


会的人~~都来呀~~~原作者天下第二刀也来呀~~帮帮忙呀~~
附件: 只有本站会员才能下载或查看附件,请您 登录注册
2008-2-17 00:18
kkqq
Rank: 2
等级:注册会员
帖子:73
积分:880
注册:2008-2-15
高手帮忙解释一下这些~~越细越好~~~

CRoundButton::CRoundButton()
{
    m_bDrawDashedFocusCircle = TRUE;
    HBITMAP hbit=(HBITMAP)LoadImage(AfxGetInstanceHandle(),"bk.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
    m_bkbitmap.Attach(hbit);
}

CRoundButton::~CRoundButton()
{
    m_rgn.DeleteObject();
}

BEGIN_MESSAGE_MAP(CRoundButton, CButton)
    //{{AFX_MSG_MAP(CRoundButton)
    //}}AFX_MSG_MAP
    ON_WM_ERASEBKGND()
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CRoundButton message handlers

void CRoundButton::PreSubclassWindow()
{
    CButton::PreSubclassWindow();

    ModifyStyle(0, BS_OWNERDRAW);

    CRect rect;
    GetClientRect(rect);

    // Resize the window to make it square
    rect.bottom = rect.right = min(rect.bottom,rect.right);

    // Get the vital statistics of the window
    m_ptCentre = rect.CenterPoint();
    m_nRadius  = rect.bottom/2-1;

    // Set the window region so mouse clicks only activate the round section
    // of the button
    m_rgn.DeleteObject();
    SetWindowRgn(NULL, FALSE);
    m_rgn.CreateEllipticRgnIndirect(rect);
    SetWindowRgn(m_rgn, TRUE);

    // Convert client coords to the parents client coords
}

void CRoundButton::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{
    ASSERT(lpDrawItemStruct != NULL);
    
    CDC* pDC   = CDC::FromHandle(lpDrawItemStruct->hDC);
    CRect rect = lpDrawItemStruct->rcItem;
    UINT state = lpDrawItemStruct->itemState;
    UINT nStyle = GetStyle();
    int nRadius = m_nRadius;

    int nSavedDC = pDC->SaveDC();

    CBrush brush;
    brush.CreatePatternBrush(&m_bkbitmap);
    pDC->SelectStockObject(NULL_PEN);
    pDC->SelectObject(&brush);

    rect.bottom = rect.right = min(rect.bottom,rect.right);

    pDC->Ellipse(rect);

    pDC->SetBkMode(TRANSPARENT);
    pDC->SetTextColor(RGB(255,0,0));
    
    CString title;
    GetWindowText(title);
    rect.top+=10;
    pDC->DrawText(title,rect,DT_CENTER);

    pDC->RestoreDC(nSavedDC);
}

BOOL CRoundButton::OnEraseBkgnd(CDC * pdc)
{
    return TRUE;
}
2008-2-17 00:43
flyue
Rank: 12Rank: 12Rank: 12
等级:版主
威望:9
帖子:1785
积分:18643
注册:2006-6-20
Windows XP 样式的修改方式:

你把这个文件添加到你的资源中:


(flyue.manifest)
插入->资源->自定义->资源类型 填"24"
再把资源名称改为"1"
编译运行,你自己看吧

[ 本帖最后由 flyue 于 2008-2-17 11:24 编辑 ]
附件: 只有本站会员才能下载或查看附件,请您 登录注册

大家一起来编程吧!
2008-2-17 11:17
kkqq
Rank: 2
等级:注册会员
帖子:73
积分:880
注册:2008-2-15

以下是引用 flyue 在 2008-2-17 11:17 的发言:

你把这个文件添加到你的资源中:

32516
(flyue.manifest)
插入->资源->自定义->资源类型 填"24"
再把资源名称改为"1"
编译运行,你自己看吧
谢谢~~我先下了看看~ ~~~不知能不能看懂呀~~
2008-2-18 00:19
kkqq
Rank: 2
等级:注册会员
帖子:73
积分:880
注册:2008-2-15

以下是引用 flyue 在 2008-2-17 11:17 的发言:

你把这个文件添加到你的资源中:

32516
(flyue.manifest)
插入->资源->自定义->资源类型 填"24"
再把资源名称改为"1"
编译运行,你自己看吧
不知道为你说的步骤不行~~按你说的我运行后没效果~~
于是我换成这样导入~~

把文件flyue.manifest添加到工程的资源中:
插入->资源->引入->文件类型改为“所有文件"->找到flyue.manifest->弹出对话框
资源类型 填"24"->确定后(弹出一堆象乱码一样的东西,汗!!)
再把资源的ID改为"1"
编译运行

这时就可以~~~~感觉好棒呀~!!!!

谢谢提供那个文件~~~

不过~~俗话说~~授鱼不如授渔~~高手要是有空的话~~请给个教程呀~~或者给个带例子的~注释!!!!
不然要是想换别的按钮~~不是又得来麻烦高手吗??
2008-2-18 01:21
flyue
Rank: 12Rank: 12Rank: 12
等级:版主
威望:9
帖子:1785
积分:18643
注册:2006-6-20

这种方法只能换成当前的WinXP主题样式的按扭,如果当前用户界面不是XP样式的话,一样没效果。要是想换你自己的图片,那还得老老实实写代码吧
还有就是你的程序在Win98下还是经典样式!
这个flyue.manifest的内容是:(XML语言)
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<dependency>
    <dependentAssembly>
        <assemblyIdentity
            type="win32"
            name="Microsoft.Windows.Common-Controls"
            version="6.0.0.0"
            processorArchitecture="X86"
            publicKeyToken="6595b64144ccf1df"
            language="*"
        />
    </dependentAssembly>
</dependency>
</assembly>
就是告诉WinXP:本程序想用当前的XP样式的控件。

大家一起来编程吧!
2008-2-19 14:10
关于我们 | 广告合作 | 编程中国 | 清除Cookies | Archiver | WAP | TOP

编程中国 版权所有,并保留所有权利。鲁ICP备08000592号
Powered by Discuz, Processed in 0.071739 second(s), 9 queries.
Copyright©2004-2008, BCCN.NET, All Rights Reserved