[添加][按钮][控件]请问如何使一个添加到按钮控件上的picture控件(加载了ICON图标)一直显示。我在对话框的初始化函数中做了如下

09月 16th, 2008 by admin
Posted in VC/MFC | No Comments »

HICON hIcon = AfxGetApp()->LoadIcon(IDI_ICON);
m_static.SetIcon(hIcon);

初始运行时,按钮控件和加载了图标的picture控件都能显示,但当点击按钮控件时,picture就不显示了。
我想让picture控件一直显示,请问高手怎么来实现。谢谢

把按钮加上WS_EX_TRANSPARENT扩展风格试试。

怎么加扩展风格,加扩展风格什么用?

你直接给按钮设置图标不就行了,何必再用一个控件覆盖?

引用 3 楼 naxiahucao 的回复:
怎么加扩展风格,加扩展风格什么用?

在对话框资源上选择按钮,然后在属性窗口设置transparent。
如果用代码,先获得按钮指针或对象,然后ModifyStyleEx。

谢谢你的回复。你说的那种情况,我试过了。但是因为有个动态按钮,即初始显示“修改”,点击之后变成“保存”,按照你说的那样做,修改和保存会同时显示。

我就想在一个按钮的部分空间上贴上一个小的图片,让图片一直显示,不好实现吗?

你那picture控件是按钮的子窗口吗?还是直接放在了对话框上?

我先前做的不是按钮的子窗口,是直接放到对话框上的。请问怎么解决呢?

用SetParent设置一下。

控件之间如何进行SetParent呢?我想把IDC_BUTTON设置成为IDC_STAITC的父窗口,请问可以吗?代码应该怎么来写。
这样设置的话,会不会让static一直在button控件上显示(static上加载了图标)。就是让按钮美观,直观。

直接给按钮设置图标

用SetParent设置一下

Tags: , , ,

[控件][按钮][属性]控件问题为什么我在按钮属性样式里改了 “缺省按钮”一按回车还是响应到OK

09月 14th, 2008 by admin
Posted in VC/MFC | No Comments »

OnOk  不好做空

VC技术内幕的例子  不行啊

那么说VC++技术内幕错了

或者版本问题    他们用VC5.0  我用的VC6.0

就是技术内幕上把OnOk架空然后该OK键ID映射新的处理函数是错的

我试两边了不行

这个解决方法很好

结贴

Tags: , , ,

[串口][通信][按钮]串口通信问题VC中如何用一个按钮实现多个数组的发送

09月 11th, 2008 by admin
Posted in VC/MFC | No Comments »

我用SerialPort类编写串口通信程序,定义数组c[8]并初始化,用WriteToPort写入串口,现在我想通过一个按钮“发送数据”,实现两个不同数组的发送,先发c[8],在发a[8],要怎么实现。我的程序是
void CSerialPortTestDlg::OnButtonSend()
{
char c[8];
c[0]='xA4';

c[7]='x22';
m_port.WriteToPort((LPCTSTR)c);
char a[8]
a[0]='x12';

a[8]='x56';
m_port.WriteToPort((LPCTSTR)a);
}

谢谢,原来是缓冲区覆盖,我在数组织之间加了Sleep(2000),程序运行后就会先延时2秒,再同时发出去,我该怎么做才能保证先发一个数组,延时,再发另一个数组

引用 1 楼 swordwave2000 的回复:
这样好像是不行的,可能只有后面的那个数组发出去,缓冲区覆盖(serialport这个类是异步),可以用串口捕捉工具看看有没有发出去,最好是在在两个数组之间延时一小段时间,

正解
我以前也遇到过这样的问题
在要发送的数组中间sleep下就可以了

我一般不同sleep
用定时器
WriteToPort(数组1)
settimer(1,2000,Null);
在timer消息里面
WriteToPort(数组2)

但是如果我要发多于两个的数组,且之间延时不同该怎么写

正解
我以前也遇到过这样的问题
在要发送的数组中间sleep下就可以了
[/Quote]

是要这样写吗?
void CSerialPortTestDlg::OnButtonSend()
{
char c[8];
c[0]='xA4';

c[7]='x22';
m_port.WriteToPort((LPCTSTR)c);
Sleep(2000);
char a[8]
a[0]='x12';

a[8]='x56';
m_port.WriteToPort((LPCTSTR)a);
}
但是运行后点击按钮,会先延时在同时发出两个数组

Tags: , , ,

[新手][按钮][一个一个]新手的问题.关于按钮一个一个点亮的问题/

09月 4th, 2008 by admin
Posted in VC/MFC | No Comments »

我有30个按钮.全是绿颜色的.
现在需要点一个总按钮,将这30个安钮按顺序边成红颜色的..
该怎么弄啊?
写原代码就马上给分。…在线等

我是新手  看不太明白..原代码有吗??

为什么一定要源代码呢??

先说说你的绿色是怎么实现的。

在类中用变量记录按钮的颜色,在按钮的父窗口中响应WM_CTLCOLOR,创建相应的画刷返回,改变颜色时先修改变量的值,再调用Invalidate刷新按钮。

Tags: , , ,

[按钮][实现][Vista]按钮实现像Vista的效果

09月 2nd, 2008 by admin
Posted in VC/MFC | No Comments »

自定义button,要求是要实现像VISTA按钮的那种一样,鼠标在按钮区域的时候按钮就亮了,用GDI+实现这个效果,我尝试过用路径渐变话刷做的,但是效果很差,因为按钮的颜色不同画刷的颜色我也没办法确定,做出来后按钮的颜色不同那种点亮的效果也就很差,最后我尝试这用颜色矩阵做,做出来是按钮变亮了,但是是全部button区域都变亮了,像白色那种亮,感觉效果还是不好,问题是始终想不通人家那个按钮效果是咋样弄出来的

大多数都是用贴图来实现的,楼主可以参考下ButtonXP、CButtonST等自绘按钮的做法。

纯粹靠代码来实现按钮的明亮和灰暗,效果很不好

codeproject上 有一个C#的
用GDI+画出来的, 其实只要颜色啊 样式啊控制好了 就可以画出来了

再有就是按钮的形状了,  因为不是规则的矩形, 你可以自己创建HRGN来实现不规则的按钮

贴图是最简单的方法,不过这种方法依赖于外部资源,

恩,谢谢大家的指点,我也和我们领导谈了换图片,结果。。。谢谢大家

没给分的2位别生气。。。我分不够了,就给前面的先给了。。。你们的分有了后一定给你们补上

Tags: , , ,

[按钮][设置][disabled]当按钮设置为disabled=true时 鼠标移动控件上时如何为按钮显示提示信息

08月 29th, 2008 by admin
Posted in VC/MFC | No Comments »

当按钮状态设置为 disabled=false 时 ,鼠标移到上面能够提示信息
但是disabled=true 就不提示了
请问要这两种状态都能够有提示,该怎么实现啊 ???
我用的工具是vc++.net 2003 ,做的是一个MFC 应用程序。

因为disabled的窗口的很多消息都被屏蔽了,你可以维护一个内部的状态来模拟被disabled的窗口,但不是真正的disabled,但是你要做很多的消息处理,比如绘制方法、鼠标和键盘消息的屏蔽。

实现这样一个小功能是不是 很复杂啊 ?? 

我是在对话框中的工具栏中显示提示的,disable了后也可以提示,具体怎么回事我不太清楚,实现过程大概是这样的:
.h文件中添加:
//——————————————————————————-
protected:
//{{AFX_MSG(CUSDLG)
    …….
    afx_msg BOOL OnToolTipText(UINT, NMHDR* pNMHDR, LRESULT* pResult);
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
//——————————————————————————–
.cpp文件中添加:
//——————————————————————————–
BEGIN_MESSAGE_MAP(CUSDLG, CDialog)
//{{AFX_MSG_MAP(CUSDLG)
    …… 
//}}AFX_MSG_MAP
    ON_NOTIFY_EX_RANGE(TTN_NEEDTEXTW,0,0xFFFF,OnToolTipText)
    ON_NOTIFY_EX_RANGE(TTN_NEEDTEXTA,0,0xFFFF,OnToolTipText)
END_MESSAGE_MAP()
//——————————————————————————–
.cpp文件中添加函数实现部分:
//——————————————————————————–
BOOL CUSDLG::OnToolTipText(UINT, NMHDR* pNMHDR, LRESULT* pResult)
{
    ASSERT(pNMHDR->code == TTN_NEEDTEXTA &brvbar &brvbar pNMHDR->code == TTN_NEEDTEXTW);

    if (GetRoutingFrame() != NULL) return FALSE;

    TOOLTIPTEXTA* pTTTA = (TOOLTIPTEXTA*)pNMHDR;
    TOOLTIPTEXTW* pTTTW = (TOOLTIPTEXTW*)pNMHDR;
    TCHAR szFullText[512];
    CString strTipText;
    UINT nID = pNMHDR->idFrom;

    if (pNMHDR->code == TTN_NEEDTEXTA && (pTTTA->uFlags & TTF_IDISHWND) &brvbar &brvbar
        pNMHDR->code == TTN_NEEDTEXTW && (pTTTW->uFlags & TTF_IDISHWND))
    {
        nID = ::GetDlgCtrlID((HWND)nID);
    }

    if (nID != 0)
    {
        AfxLoadString(nID, szFullText);
        strTipText=szFullText;

#ifndef _UNICODE
        if (pNMHDR->code == TTN_NEEDTEXTA)
        {
            lstrcpyn(pTTTA->szText, strTipText, sizeof(pTTTA->szText));
        }
        else
        {
            _mbstowcsz(pTTTW->szText, strTipText, sizeof(pTTTW->szText));
        }
#else
        if (pNMHDR->code == TTN_NEEDTEXTA)
        {
            _wcstombsz(pTTTA->szText, strTipText,sizeof(pTTTA->szText));
        }
        else
        {
            lstrcpyn(pTTTW->szText, strTipText, sizeof(pTTTW->szText));
        }
#endif

        *pResult = 0;
        ::SetWindowPos(pNMHDR->hwndFrom, HWND_TOP, 0, 0, 0, 0,SWP_NOACTIVATE &brvbarSWP_NOSIZE &brvbarSWP_NOMOVE &brvbarSWP_NOOWNERZORDER);
       
        return TRUE;
    }

    return FALSE;
}
//——————————————————————————–
我这样添加后,对话框上的按钮在任何情况下都会显示提示。不知道你的具体应用环境是怎么样的,借鉴一下看行不行,呵呵。

哎呦 我的是工具栏上的按钮 不是一般的Button 不知道对Button有没有用 你自己试试吧

fuck

靠,fuck也想要分

他奶奶地 ,不就50分吗?? 给你算了

Tags: , , ,

[绘制][按钮][文字]绘制按钮内文字的下划线

08月 26th, 2008 by admin
Posted in VC/MFC | No Comments »

我想在mousemove的时候给按钮的标题加上下划线. 标题是居中显示的, 问题是有什么简便的方法可以得到文字左下方的坐标. 得到该坐标后我就可以line to画一条线了.

CFont里面有对underline的支持吧?

有对underline的支持。ls的意思是自定义字体?

自绘,自Font

字体的underline似乎不可以定义颜色和大小?  我用( 按钮的高度 - 字符高度)/2 + 字符高度+ 往下偏移一个向素, 成功得到y 坐标.
同理, X坐标 我通过: ( 按钮的宽度 - 标题字符串的宽度)/2 得到, 照理由应该是标题第一个字符的起始x坐标的, 但是有些错误.应该是我计算
字符串的宽度时方法有误? 我是这样计算的: 字符的宽度*字符个数.  GetTextMetrics得到的tmAveCharWidth = 5 , 而tmMaxCharWidth = 26 ,
我的是中文字符,一个值太小,一个又太大,奇怪!!

加分了. 再问一个问题:
大家都看过VC新建MFC项目工程时的向导. 左边的按钮在鼠标移到时产生下划线, 选中状态的按钮有个阴影. 我现在做的就是模仿这个向导的. 鼠标移进移出按钮下划线出现与消失我已经做好了.

现在我的问题是在主对话框点击下一步时,如何使左边的按钮也相应的变化?! 我有试过用m_btn1.SendMessage(WM_LBUTTONDOWN,NULL,NULL),可以设置选中状态, 但是有个不好处就是连下划线也画出来了. 我尝试继续发送MouseLeave,但是下划线却并不消失. 怎么办??
还有就是, DrawItem 都是什么时候被调用的,为什么我在主对话框晃动鼠标(并没碰到按钮),按钮却会闪烁?

发贴一天后才可以加分.倒..  问题补充: 是 VS 2003以上版本的新建项目的向导.

?

支持1楼的方法

Tags: , , ,

[CPropertySheet][确定][按钮]CPropertySheet下确定按钮旁边创建一个editbox.rect怎么控制

08月 24th, 2008 by admin
Posted in VC/MFC | No Comments »

目前我这样做
OnInitDialog里GetDlgItem(IDOK)后,再用GetWindowRect(确定按钮)取得确定按钮的位置大小,得一个rect,
每次创建editbox前都要用“眼睛观察",然后相就的rect.left-x,rect.top+/-x;
当整个属性页大小变化了(实际上是另一个属性页,基类用的CMySheet,派生CPropertySheet,这个位置就不对了

Tags: , , ,

[设定][工具][按钮]【请问】是否能直接 设定 工具栏 按钮 enable/disable

08月 20th, 2008 by admin
Posted in VC/MFC | No Comments »

VC下,现在用ON_UPDATE_COMMAND_UI。  
      但是发现,不能达到预期效果:有时该disable掉了,没有disable掉;应该是enable的没有enable;有时对应的菜单有预期的效果,但是toolbox却不行。

      还有什么更好的办法呢?

其他方法么。应该也可以有的。
只是不太正规。

1、创建一个CMenu,用代码添加每一个菜单项
Enable:
      添加的时候指定对应的ID
Disable:
      添加的时候ID项写NULL
2、删除主菜单,并释放对应内存
3、把新创建的CMenu插入,作为主菜单
一劳永逸的方法。不过维护麻烦。

问题起由见我发的另外一个贴:【再次急问】   关于工具栏的   ON_UPDATE_COMMAND_UI的命令响应  

现在问题解决,我觉得还是因为定时器不断的发消息,窗口进行处理,所以OnIdle中没有机会更新UI。

所以,曲线救国,再放大缩小的时候,先把定时器停止下来,Speed改变以后,再设置定时器。

谢谢各位热心帮助。

我现在总共只有20分,不能给兄弟们都加上了,望兄弟们海涵,等攒够了,一定给各位加上,见谅

Tags: , , ,

[修改][按钮][颜色]VC修改按钮颜色是使用COLORREF SetBKColor(HDC hdc, COLORREF crColor)吗

08月 6th, 2008 by admin
Posted in VC/MFC | No Comments »

我使用的VC的API编程环境编写了一个程序,我想修改按钮的颜色,怎样解决这个问题呀?
后来我尝试使用函数COLORREF SetBKColor(HDC hdc, COLORREF crColor),但是不起作用呀?
具体代码如下
        SetBkColor(BeginPaint(GetDlgItem(hwnd,IDC_RADIO1), &ps),RGB(255,0,0));
这个HDC是怎么样获得呀?
请大家给我一个解决一下。或者给我说一下怎么样修改按钮颜色?
我是使用的API编程,谢谢各位高手。
急急急急急急。。。。。。。。。。。。。。。。。

Tags: , , ,