标题:MFC对话框按钮,怎么弄成WINDOWS主题的样式?
只看楼主
kkqq
Rank: 1
等 级:新手上路
帖 子:77
专家分:0
注 册:2008-2-15
结帖率:100%
 问题点数:0 回复次数:11 
MFC对话框按钮,怎么弄成WINDOWS主题的样式?
MFC对话框按钮,怎么弄成WINDOWS主题的样式?
 我编了一个MFC程序,程序里面对话框上的按钮都是像win98里那种的灰色的方块,很难看。怎么把它弄成winXP里的按钮样式?
搜索更多相关主题的帖子: MFC对话框 WINDOWS主题 按钮 样式 方块 
2008-02-16 03:13
kkqq
Rank: 1
等 级:新手上路
帖 子:77
专家分:0
注 册:2008-2-15
得分:0 
然道没人知道吗~~~~
2008-02-16 10:54
余来
Rank: 6Rank: 6
等 级:贵宾
威 望:26
帖 子:956
专家分:18
注 册:2006-8-13
得分:0 
重绘拉
重再DrawItem,并加BS_OWNDRAW(好象是这个风格,可能其中字母错乱 )风格.

2008-02-16 15:18
kkqq
Rank: 1
等 级:新手上路
帖 子:77
专家分:0
注 册:2008-2-15
得分:0 
[bo]以下是引用 [un]余来[/un] 在 2008-2-16 15:18 的发言:[/bo]

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


先谢谢版主回答~~

不过~~我还是不太明白呀~~能具体说明一下吗?~~或给个教程~~
2008-02-16 23:56
kkqq
Rank: 1
等 级:新手上路
帖 子:77
专家分:0
注 册:2008-2-15
得分:0 
顺便问一下版主~~这种按钮是如何做的~~还有那背景~~
这是我在论坛里下的一个计算器~~
是版主您有改过~~
那个按钮是哪个代码在起作用呀~~~~~能提供一下吗?~~


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


会的人~~都来呀~~~原作者天下第二刀也来呀~~帮帮忙呀~~
2008-02-17 00:18
kkqq
Rank: 1
等 级:新手上路
帖 子:77
专家分:0
注 册:2008-2-15
得分:0 
高手帮忙解释一下这些~~越细越好~~~
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-02-17 00:43
flyue
Rank: 10Rank: 10Rank: 10
来 自:江南西道
等 级:贵宾
威 望:19
帖 子:3465
专家分:1563
注 册:2006-6-20
得分:0 
Windows XP 样式的修改方式:
你把这个文件添加到你的资源中:

flyue.rar (688 Bytes)

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

[[it] 本帖最后由 flyue 于 2008-2-17 11:24 编辑 [/it]]

天之道,损有余而补不足.人之道则不然,损不足以奉有余.孰能有余以奉天下,唯有道者.
2008-02-17 11:17
kkqq
Rank: 1
等 级:新手上路
帖 子:77
专家分:0
注 册:2008-2-15
得分:0 
[bo]以下是引用 [un]flyue[/un] 在 2008-2-17 11:17 的发言:[/bo]

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

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



谢谢~~我先下了看看~ ~~~不知能不能看懂呀~~
2008-02-18 00:19
kkqq
Rank: 1
等 级:新手上路
帖 子:77
专家分:0
注 册:2008-2-15
得分:0 
[bo]以下是引用 [un]flyue[/un] 在 2008-2-17 11:17 的发言:[/bo]

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

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



不知道为你说的步骤不行~~按你说的我运行后没效果~~
于是我换成这样导入~~

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

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

谢谢提供那个文件~~~

不过~~俗话说~~授鱼不如授渔~~高手要是有空的话~~请给个教程呀~~或者给个带例子的~注释!!!!
不然要是想换别的按钮~~不是又得来麻烦高手吗??
2008-02-18 01:21
flyue
Rank: 10Rank: 10Rank: 10
来 自:江南西道
等 级:贵宾
威 望:19
帖 子:3465
专家分:1563
注 册:2006-6-20
得分:0 
这种方法只能换成当前的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.
            version="6.0.0.0"
            processorArchitecture="X86"
            publicKeyToken="6595b64144ccf1df"
            language="*"
        />
    </dependentAssembly>
</dependency>
</assembly>
就是告诉WinXP:本程序想用当前的XP样式的控件。

天之道,损有余而补不足.人之道则不然,损不足以奉有余.孰能有余以奉天下,唯有道者.
2008-02-19 14:10



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-200049-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 1.272283 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved