[DrawText][改变][输出]DrawText如何改变输出的字体

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

原码是

hdc = BeginPaint(hWnd, &ps);
RECT rt;
GetClientRect(hWnd, &rt);

DrawText(hdc, szHello, strlen(szHello), &rt, DT_LEFT);
EndPaint(hWnd, &ps);

是输出SZHELLO,想改变这个输出的字体,应该怎么做呢??

搞定,结帖给分!

Tags: , , ,

[改变][下拉]atl怎样改变下拉框的值

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

我执行bo=SetWindowText(hwnd, sText.c_str());,结果返回0,如果是编辑框就返回1。
1.是因为我的sText的值和下拉框中的对不上?
2.是因为我的调用函数不正确?

引用 1 楼 softman_2000 的回复:
DropDown风格的就可以返回1了,你肯定用的是DropDownList风格。

就是IE中的打印页面设置中的纸张大小。

Tags: , ,

[SetWindowText][改变][窗体]为什么不能用SetWindowText改变窗体的标题

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

CpWdWnd* avpd = new CpWdWnd(this);
avpd->GetDlgItem(IDD_DIALOG1)->SetWindowText("fads");//我希望在这里改变avpd窗体的标题。应该怎么做?
if (avpd->DoModal() == IDOK)
{
//do something
}

//下面是CpWdWnd的头文件
#pragma once

// CpWdWnd 对话框

class CpWdWnd : public CDialog
{
DECLARE_DYNAMIC(CpWdWnd)

public:
CpWdWnd(CWnd* pParent = NULL);  // 标准构造函数
virtual ~CpWdWnd();

// 对话框数据
enum { IDD = IDD_DIALOG1 };

protected:
virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持

DECLARE_MESSAGE_MAP()
public:
afx_msg void OnEnChangeEdit1();
public:
afx_msg void OnBnClickedOk();
public:
afx_msg void OnBnClickedCancel();
};

也是不行,一开始就是用avpd->SetWindowText("fads");的

看这个断言
void CWnd::SetWindowText(LPCTSTR lpszString)
{
ASSERT(::IsWindow(m_hWnd));

if (m_pCtrlSite == NULL)
::SetWindowText(m_hWnd, lpszString);
else
m_pCtrlSite->SetWindowText(lpszString);
}

看来只用当窗口创建完了才能用SetWindowText了

你的CpWdWnd关联资源模板了吗?

1、关联了
修改资源模板的Caption

2、没关联
修改CpWdWnd的构造函数,比如

CpWdWnd::CpWdWnd(CWnd* pParent = NULL) : CDialog("fads",pParent)
{
}

模态对话框 DoModal() 时才建立,返回时模态对话框已经关闭.

想在模态对话框显示以前改变标题,在 CDialog::OnInitDialog() 中 SetWindowText("abc");

Tags: , , ,

[改变][图标][源码]关于EXE改变图标源码

09月 1st, 2008 by admin
Posted in VC/MFC | No Comments »

如何改变SDK编写的EXE执行文件的图标啊?假如用PE改可否给个源码
cttnbcj_1986@163.com

引用 1 楼 zgl7903 的回复:
对常规的Windows程序 VC资源编辑器就可以修改,

如在VC6下
以资源方式打开想要修改的EXE文件,
展开ICON,
导入修改的图标,
删除原来的图标(删除前记住其ID)
把新导入的图标的ID修改为先前的ID
保存退出

Tags: , , ,

[改变][对话][颜色]关于改变对话框颜色的问题!

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

CRect rect;
CPaintDC dc(this);
GetDlgItem(IDC_RECT)->GetWindowRect(rect);
dc.FillSolidRect(rect,RGB(255,255,255)); //设置为绿色背景
我想先得到IDC_RECT控件的大小,然后再设置窗口的背景色!
但是程序运行出错!

HBRUSH XXXXXXXXX::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{

HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);

switch(nCtlColor)
{
case CTLCOLOR_DLG:
return 你的颜色话刷;
break;
default:
break;
}
return hbr;
}

if(nCtlColor == CTLCOLOR_DLG)
  {
  CBrush *brush;
    brush = new CBrush(RGB(20,221,221));
  return (HBRUSH)(brush->m_hObject);
  }

你的代码连画刷也没,SelectObject也没你拿什么画啊?

引用 2 楼 Amuro1987218 的回复:
HBRUSH XXXXXXXXX::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{

HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);

switch(nCtlColor)
{
case CTLCOLOR_DLG:
return 你的颜色话刷;
break;
default:
break;
}
return hbr;
}

Tags: , , ,

[改变][listctrl][字体]如何改变listctrl所有字体的颜色不是单个行的

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

RT,SetTextColor();没起作用,希望能帮上我的忙!

不能,也不想啊,我只想统一改变所有字体颜色,不行的,没什么反映!

响应NM_CUSTOMDRAW通知来处理,参考MSDN。

我就不明白,settextColor()怎么了,为什么不起作用,不起作用,还要它干吗????!!!!我只是想改变所有所有的字体,这么简单的事情,Clistctrl应该能搞定,

SetTextColor应该在输出文字前调用的,ListCtrl在每次输出文字前都会设置颜色,所以你之前设置的不起作用。

这个不明白,我是在输出文字前设置的,不过,还是没有用

//通过响应NM_CUSTOMDRAW改变Item项

afx_msg void OnCustomDrawList ( NMHDR* pNMHDR, LRESULT* pResult );  //声明

ON_NOTIFY ( NM_CUSTOMDRAW, IDC_LIST_TEST, OnCustomDrawList )  //映射

void CXXXDlg::OnCustomDrawList ( NMHDR* pNMHDR, LRESULT* pResult )  //定义
{
    NMLVCUSTOMDRAW* pLVCD = reinterpret_cast <NMLVCUSTOMDRAW*>( pNMHDR );

    if ( CDDS_PREPAINT == pLVCD->nmcd.dwDrawStage )
    {
        *pResult = CDRF_NOTIFYITEMDRAW;
    }
    else if ( CDDS_ITEMPREPAINT == pLVCD->nmcd.dwDrawStage )
    {
        COLORREF crText,crBkgnd;
        crText = RGB(0,0,0);        //字体颜色
        crBkgnd = RGB(255,255,255);  //背景颜色
        pLVCD->clrText = crText;
        pLVCD->clrTextBk = crBkgnd;

        *pResult = CDRF_DODEFAULT;
    }
}

嗯,现在发现问题所在了,其实SetTextColor()可以的,只是我在listctrl中加了背景图片,所有字体的显示改变了,7楼的方便也可以,请问这个问题如果解决!明天再加分!
      “ listctrl加了背景图片后不能改变字体颜色,请指教!!!”

嗯,现在发现问题所在了,其实SetTextColor()可以的,只是我在listctrl中加了背景图片,所有字体改变不显示了,7楼的方便也可以,请问这个问题如果解决!明天再加分!
      “ listctrl加了背景图片后不能改变字体颜色,请指教!!!”

Tags: , , ,

[ListBox][改变][中时]ListBox改变选中时的背景颜色

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

如题 默认背景色是蓝色请问怎么改?

是选中时光标的颜色不是本身行的颜色

那估计只有自绘了

BOOL CColoredListCtrlTestDlg::OnInitDialog()
{
CDialog::OnInitDialog();

//略
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon

// TODO: Add extra initialization here

    CStringArray Head;
    CByteArray  Cols;
    Head.Add("Item");
    Cols.Add(40);      //40%
    Head.Add("Sub1");
    Cols.Add(30);      //70%
    Head.Add("Sub2");
    Cols.Add(30);      //100%
    m_ColListCtrl.InitCtrl(&Head, &Cols);

    CString Linetitle;
    int pos=0;
    for (int x=0; x <10;x++)
    {
        Head.RemoveAll();
        Linetitle.Format("Line %d",x);
        Head.Add(Linetitle);
        Linetitle.Format("SubLine %d-1",x);
        Head.Add(Linetitle);
        Linetitle.Format("SubLine %d-2",x);
        Head.Add(Linetitle);
        pos=m_ColListCtrl.AddItem(&Head);
        if (pos!=LISTCTRL_ERROR) ;
    }
    m_ColListCtrl.SendMessage(LVM_SETEXTENDEDLISTVIEWSTYLE, 0, (LPARAM)LVS_EX_FULLROWSELECT);

m_ColListCtrl.SetItemBackgndColor(RGB(100,100,100),0,2);
m_ColListCtrl.SetItemTextColor(RGB(255,0,0),0,2);
return TRUE;  // return TRUE  unless you set the focus to a control
}

如果需要说邮箱给你整个源程序

另一个例子,和上面的代码相同
关键是以下这几句,颜色你自已再设下,蓝色的一下子想不出是多少

m_ColListCtrl.SendMessage(LVM_SETEXTENDEDLISTVIEWSTYLE, 0, (LPARAM)LVS_EX_FULLROWSELECT);

    for (x=0; x <COLLIST_MAX;x++)
    {
       
        m_ComboCtrlText.AddString(colList[x].str);
        m_ComboCtrlBack.AddString(colList[x].str);
    }
    m_ComboCtrlBack.SetCurSel(0);
    m_ComboCtrlText.SetCurSel(1);

  VC界面里面的东西太复杂,也不好弄,不如用皮肤粘贴的方式实现。

akxu2005@sina.com 我看下是不是我想要的效果,你这个应该只是改行的颜色吧不是改选中状态的蓝色

Tags: , , ,

[改变][ClistCtrl][标题]如何改变ClistCtrl的标题栏的颜色(高分重谢!)

07月 31st, 2008 by admin
Posted in VC/MFC | No Comments »

我找了好多方法。但不就是用不了。我不知道哪里出了问题。
方法1 继承一个CHeaderCtrl的类,  重载OnDrawItem,这里面绘制什么都可以  然后在把这个类的实例和一个listctrl联系起来 
方法2 从CListCtrl和CHeaderCtrl分别派生出自己的类CMyListCtrl和CMyHeaderCtrl。  改写CHeaderCtrl默认的绘制函数OnPaint(),在CMyHeaderCtrl::OnPaint()函数中你可以把HeaderCtrl绘制成你想要的样子。  在CMyListCtrl中,我们声明一个CMyHeaderCtrl的类成员,并override函数CMyListCtrl::PreSubclassWindow()。
方法3 我还问过公司一个牛人 他告诉我要重构 CMyListCtrl。
但是,不知道怎么回事怎么也不行。
有人能给我具体讲讲过程吗?或给我一个实际的例子!(我的邮箱:jxxjzzh@hotmail.com)本人必有重谢!!!

http://www.codeproject.com/KB/list/skinlist.aspx
找到了个demo和你分享一下
有问题再交流吧

我真是郁闷死了!好几天没解决。
你有MSN吗?我还有一个问题,就是在CListCtrl的某行某列中插入几个项目。然后,点击一项发生一个事件(像迅雷中的社区互动栏一样)。关键就是想知道怎么在CListCtrl的某行某列中插入几个项目。想和你交流交流!

Tags: , , ,

[改变][按键][标题]怎样改变按键标题

07月 21st, 2008 by admin
Posted in VC/MFC | No Comments »

比如说先在对话框上设置一个按键
标题是“开”
想要实现在程序中按下键后 按键标题变成“关”
再按又变成“开”

还有可以实现判断按键标题是什么字符串的函数吗????

得到:GetDlgItem(按键ID)->GetWindowText()
设置:GetDlgItem(按键ID)->SetWindowText()

if …..
      SetDlgItemText(IDC_OPEN_NET,_T("****"));
else
      SetDlgItemText(IDC_OPEN_NET,_T("****"));

那VC中用什么数据类型装中文字符串??

定义一个字符串Cstring Title;
定义全局变量BOOL IfTitle;
在按钮里添加:
if (IfTitle==TRUE)
      {SetDlgItemText(IDC_OPEN_NET,_T("开"));
      IfTitle=FALSE;}
else
  {  SetDlgItemText(IDC_OPEN_NET,_T("关"));
      IfTitle=TRUE;}

引用 5 楼 halibobo520 的回复:
//定义一个字符串Cstring Title; //这个变量装字符串 ,可以自己将SetDlgItemText(IDC_OPEN_NET,Title);
定义全局变量BOOL IfTitle;
在按钮里添加:
if (IfTitle==TRUE)
      {SetDlgItemText(IDC_OPEN_NET,_T("开"));
      IfTitle=FALSE;}
else
  {  SetDlgItemText(IDC_OPEN_NET,_T("关"));
      IfTitle=TRUE;}

引用 6 楼 halibobo520 的回复:
引用 5 楼 halibobo520 的回复:
//定义一个字符串Cstring Title; //这个变量装字符串 ,可以自己将SetDlgItemText(IDC_OPEN_NET,Title);
定义全局变量BOOL IfTitle;
在按钮里添加:
if (IfTitle==TRUE)
{SetDlgItemText(IDC_OPEN_NET,_T("开"));
IfTitle=FALSE;}
else
{⠠SetDlgItemText(IDC_OPEN_NET,_T("关"));
IfTitle=TRUE;}

Tags: , , ,

[慎入][动态][改变]低手慎入! 如何动态改变EDITBOX控件的文字自动换行功能

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

我有一个EDIT控件,需要在某些时候文字宽度超过编辑控件的窗口宽度时就自动换行显示,而有些时候又不要自动换行,也就是文字换行的标准是软硬换行符而不是编辑控件宽度!
        我用SetWindowLong来设置这个控件WS_HSCROLL和ES_AUTOHSCROLL属性,结果实际结果不变(但是属性已经改正确,而且我已经确认在资源编辑器里改动某个属性的结果等于了我人工设置的结果)!

      所以希望高手给提供一个可以真正有用的随时改变编辑控件换行功能的函数或代码!

先把原来的控件信息给保存下来,然后删除掉该控件,最后根据新的Style重新Create一个控件即可。
这里有段代码:

BOOL   ModifyControlStyle(CWnd*   pWnd,LPCTSTR   lpszClassName,DWORD   dwRemove,DWORD   dwAdd,DWORD   dwRemoveEx,DWORD   dwAddEx)
{
CWnd*   pParentWnd   =   pWnd-> GetParent();
CFont*   pFont   =   pWnd-> GetFont();
CString   strText;
pWnd-> GetWindowText(strText);
CRect   rcWindow;
pWnd-> GetWindowRect(&rcWindow);
pParentWnd-> ScreenToClient(rcWindow);
DWORD   dwNewStyle   =   (pWnd-> GetStyle()   &   ~dwRemove)   |   dwAdd;
DWORD   dwNewStyleEx   =   (pWnd-> GetExStyle()   &   ~dwRemoveEx)   |   dwAddEx;
UINT   nID   =   pWnd-> GetDlgCtrlID();
pWnd-> ShowWindow(SW_HIDE);
pWnd-> DestroyWindow();
BOOL   bResult   =   pWnd-> CreateEx(dwNewStyleEx,lpszClassName,strText,dwNewStyle,rcWindow,pParentWnd,nID);
pWnd-> SetFont(pFont);
return   bResult;
}

调用的时候这么用就行了:
添加style:
ModifyControlStyle(GetDlgItem(IDC_EDIT4), "Edit ",0,ES_MULTILINE,0,0);
删除Style:
ModifyControlStyle(GetDlgItem(IDC_EDIT4), "Edit ",ES_MULTILINE,0,0,0);

对楼主的这种标题方法持不同意见,本来这里就是一个互相交流互相学习的平台,楼主确说什么低手慎入,难道低手就不能进来了吗?即使不能帮你解答问题,也可以从别人的解答中获得知识,楼主说低手慎入,无非意在表明楼主是一高手,楼主果真是高手吗?即使是真高手,我也对这种高手颇为不屑,现代的社会强调的是德才兼备,如果无德,即使再高的才也只能是个危险品,窃为楼主惜之!

三楼朋友所言及是,我这么写标题无非是想增加该帖子的关注度,并无诋毁菜鸟之意!

我要是高手也就不会问这么浅的问题了,哈哈

真郁闷啊,难道就没有直接修改可以实现的办法?

Tags: , , ,