posts - 131, comments - 12, trackbacks - 0, articles - 0
  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

     摘要: 1、连接Mysql2、修改密码93、增加新用户4.1 创建数据库4.2 显示数据库4.3 删除数据库4.4 连接数据库4.5 当前选择的数据库5.1 创建数据表5.2 获取表结构5.3 删除数据表5.4 表插入数据5.5 查询表中的数据5.6 删除表中数据5.7 修改表中数据5.8 增加字段5.9 修改表名6、备份数据库7.2 一个建库和建表的实例27.1 一个建库和建表的实例11、连接Mysql...  阅读全文

posted @ 2012-10-29 14:55 盛胜 阅读(335) | 评论 (0)编辑 收藏

数据库操作,接口

posted @ 2012-10-29 09:13 盛胜 阅读(231) | 评论 (0)编辑 收藏

MFC的图片按钮  

利用CBitmapButton类实现位图按钮的两种方法 利用CBitmapButton类实现位图按钮的两种方法:
方法一:
1、在资源编辑的时候选中按钮的 Owner draw 属性,不需要选择 Bitmap 属性.
按钮右键-->Styles-->Owner draw

2、在程序中定义一个CBitmapButton成员变量。
注意:不能使用ClassWizard为按钮映射一个CButton变量,然后改为CBitmapButton,
这么做并不能将按钮直接映射为CBitmapButton类的对象,反而会出现初始化错误

3、使用CBitmapButton::LoadBitmaps装载各种状态的图片,
使用CBitmapButton::SubclassDlgItem关联到想要的按钮,
使用CBitmapButton::SizeToContent函数使按钮适合图片大小。
注意Loadbitmaps一定要在关联到按钮之前进行!

附:添加资源Bitmap的方法:Insert菜单-->Resource -->Resource type:Bitmap-->Import, 
之后选择所需的图片就可以了

方法一的例子:
首先,选中按钮的owner Draw属性,在资源中加载两副*.bmp格式的位图,
然后在对话框类中加入:
1CBitmapButton m_btnX1;
2//定义变量,必须放在函数外面才能正常实现
3
4BOOL CXXXXXXX::OnInitDialog()
5{
6CDialog::OnInitDialog();
7
8m_btnX1.LoadBitmaps(IDB_XXXX_UP,IDB_XXXX_DOWN);
9//这里是两副位图,鼠标按下和弹起,
10// 也可以只加一个ID资源;
11m_btnX1.SubclassDlgItem(IDC_DASEN_X1,this);
12m_btnX1.SizeToContent();
13}
14
15文章引用自:http://blog.sina.com.cn/s/blog_44e571d70100080o.html
16
方法二:使用CBitmapButton::AutoLoad函数关联到想要的按钮
需要注意:
A、使用CBitmapButton::AutoLoad函数之前不能使用CBitmapButton::LoadBitmaps装载
各种状态的图片,否则会出错。
B、AutoLoad函数完成关联和改变按钮大小的功能。类似于上面CBitmapButton::SubclassDlgItem
和CBitmapButton::SizeToContent函数的功能。
C、CBitmapButton::AutoLoad使用的位图是默认资源ID的,即它会自动装载相关资源位图。
位图的资源ID格式为:
"按钮Caption+U"、"按钮Caption+D"、"按钮Caption+F"、"按钮Caption+X",
分别代表Up、Down、Focus、Disable状态。
如资源编辑时,希望关联的按钮的Caption为Test,
那么其默认装载的位图资源的ID为:"TestU"/"TestD"/"TestF"/"TestX",
注意分号""也是其ID的一部分。
方法二例子:
首先,选中Caption为:"myBitmapButton"按钮的owner Draw属性
其次,添加两个位图资源,并修改其ID分别为:"myBitmapButtonU"和"myBitmapButtonD",这里只添加两个位图
然后在对话框类中加入:
1 CBitmapButton m_btnX1;//必须放在函数外面才能正常实现
2 BOOL CXXXXXXX::OnInitDialog()
3 {
4 CDialog::OnInitDialog();

6 m_btnX1.AutoLoad(IDC_BUTTON1,this);//ID为IDC_BUTTON1的按钮的Caption为:myBitmapButton
7 }
至此两种方法就都结束了。

posted @ 2012-10-26 15:19 盛胜 阅读(1126) | 评论 (0)编辑 收藏

新建一个MFC项目
在类视图中添加OnEraseBkgnd的消息响应函数,函数的编写如下:
BOOL CbackgDlg::OnEraseBkgnd(CDC* pDC)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
CDialog::OnEraseBkgnd(pDC);   
if(!m_Bitmap.m_hObject)
return true;
CRect rect;
GetClientRect(&rect);
        //设备上下文对象的类
CDC dc;
//该函数创建一个与指定设备兼容的内存设备上下文环境(DC)
dc.CreateCompatibleDC(pDC);
        //该函数选择一对象到指定的设备上下文环境中,该新对象替换先前的相同类型的对象
CBitmap* pOldBitmap = dc.SelectObject(&m_Bitmap);
int bmw, bmh ;
BITMAP bmap;
m_Bitmap.GetBitmap(&bmap);
bmw = bmap.bmWidth;
bmh = bmap.bmHeight;
int xo=0, yo=0;
////////此处贴图采用拉伸strentch//////////
pDC->StretchBlt(xo, yo, rect.Width(),rect.Height(), &dc,
0, 0,bmw,bmh, SRCCOPY);
/////////////////////////////////////////
dc.SelectObject(pOldBitmap);
return true;
//return CDialog::OnEraseBkgnd(pDC);
}
m_bitmap在头文件中声明 
private:
CBitmap m_Bitmap;
并在窗口初始化函数OnInitDialog()中添加一句:
m_Bitmap.LoadBitmap(IDB_BITMAP1);

图片为bmp格式可行,图片为png格式不可行。其他图片类型未测试。

BOOL StretchBlt(HDC hdcDest, int nXOriginDest, int nYOriginDest, int nWidthDest, int nHeightDest, HDC hdcSrc, int nXOriginSrc, int nYOriginSrc, int nWidthSrc, int nHeightSrc, DWORD dwRop);
hdcDest:指向目标设备环境的句柄。
  nXOriginDest:指定目标矩形左上角的X轴坐标,按逻辑单位表示坐标。
  nYOriginDest:指定目标矩形左上角的Y轴坐标,按逻辑单位表示坐标。
  nWidthDest:指定目标矩形的宽度,按逻辑单位表示宽度。
  nHeightDest:指定目标矩形的高度,按逻辑单位表示高度。
  hdcSrc:指向源设备环境的句柄。
  nXOriginSrc:指向源矩形区域左上角的X轴坐标,按逻辑单位表示坐标。
  nYOriginSrc:指向源矩形区域左上角的Y轴坐标,按逻辑单位表示坐标。
  nWidthSrc:指定源矩形的宽度,按逻辑单位表示宽度。
  nHeightSrc:指定源矩形的高度,按逻辑单位表示高度。
  dwRop:指定要进行的光栅操作。光栅操作码定义了系统如何在输出操作中组合颜色,这些操作包括刷子、源位图和目标位图等对象。参考BitBlt可了解常用的光栅操作码列表。
  下面列出了一些常见的光栅操作代码: BLACKNESS:表示使用与物理调色板的索引0相关的色彩来填充目标矩形区域,(对缺省的物理调色板而言,该颜色为黑色)。 DSTINVERT:表示使目标矩形区域颜色取反。 MERGECOPY:表示使用布尔型的AND(与)操作符将源矩形区域的颜色与特定模式组合一起。 MERGEPAINT:通过使用布尔型的OR(或)操作符将反向的源矩形区域的颜色与目标矩形区域的颜色合并。 NOTSRCCOPY:将源矩形区域颜色取反,再拷贝到目标矩形区域。 NOTSRCERASE:使用布尔类型的OR(或)操作符组合源和目标矩形区域的颜色值,然后将合成的颜色取反。 PATCOPY:将特定的模式拷贝到目标位图上。 PATPAINT:通过使用布尔OR(或)操作符将源矩形区域取反后的颜色值与特定模式的颜色合并。然后使用OR(或)操作符将该操作的结果与目标矩形区域内的颜色合并。 PATINVERT:通过使用XOR(异或)操作符将源和目标矩形区域内的颜色合并。 SRCAND:通过使用AND(与)操作符来将源和目标矩形区域内的颜色合并。 SRCCOPY:将源矩形区域直接拷贝到目标矩形区域。 SRCERASE:通过使用AND(与)操作符将目标矩形区域颜色取反后与源矩形区域的颜色值合并。 SRCINVERT:通过使用布尔型的XOR(异或)操作符将源和目标矩形区域的颜色合并。 SRCPAINT:通过使用布尔型的OR(或)操作符将源和目标矩形区域的颜色合并。 WHITENESS:使用与物理调色板中索引1有关的颜色填充目标矩形区域。(对于缺省物理调色板来说,这个颜色就是白色)

posted @ 2012-10-25 17:38 盛胜 阅读(643) | 评论 (0)编辑 收藏

一、禁止对话框的移动
(1)、第一种方法
为这个对话框添加系统消息过虑处理:
.h中:
...
afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
...

.cpp中
BEGIN_MESSAGE_MAP(CXXXDlg, CDialog)
...
ON_WM_SYSCOMMAND()
...
END_MESSAGE_MAP()


void CXXXDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if (nID == SC_MOVE || nID==0xF012)
return;
else
CDialog::OnSysCommand(nID, lParam);
}

SC_MOVE就是0xF010。
参考帖子:http://topic.csdn.net/t/20020821/12/957952.html
(2)、第二种方法
.h中:
...
afx_msg UINT OnNcHitTest(CPoint point); 
...

.cpp中
BEGIN_MESSAGE_MAP(CXXXDlg, CDialog)
...
ON_WM_NCHITTEST() 
...
END_MESSAGE_MAP()


UINT CXXXDlg::OnNcHitTest(CPoint point)
{
    int ret =CDialog::OnNcHitTest(point);

    if(HTCAPTION == ret)
       returnHTCLIENT;

    returnret;
}

二、禁止对话框改变大小
.h中:
...
afx_msg UINT OnNcHitTest(CPoint point); 
...

.cpp中
BEGIN_MESSAGE_MAP(CXXXDlg, CDialog)
...
ON_WM_NCHITTEST() 
...
END_MESSAGE_MAP()


UINT CXXXDlg::OnNcHitTest(CPoint point)
{
    int ret =CDialog::OnNcHitTest(point);

   //if语句的前两行是用来禁止改变大小的,最后一行是用来禁止移动的
    if(HTTOP ==ret || HTBOTTOM == ret || HTLEFT == ret || HTRIGHT == ret
      || HTBOTTOMLEFT == ret ||HTBOTTOMRIGHT == ret || HTTOPLEFT == ret || HTTOPRIGHT == ret       || HTCAPTION== ret)
       returnHTCLIENT;

    returnret;
}
参考帖子:http://web.newsfan.net/showpost.php?p=594616

posted @ 2012-10-24 17:13 盛胜 阅读(1371) | 评论 (0)编辑 收藏

方法一:

在Dialog::OnInitDialog()中加入:

ModifyStyle(WS_CAPTION,0,0);  // 如果只是要普通的全屏,不想去掉标题栏,就不用第一个语句
SendMessage(WM_SYSCOMMAND,SC_MAXIMIZE,0);

 

不过这种方法不方便调整控件的位置,此时可以考虑方法二

 

方法二:
先取得分辨率,

int cx,cy; 
cx = GetSystemMetrics(SM_CXSCREEN);
cy = GetSystemMetrics(SM_CYSCREEN);



再用MoveWindow

CRect rcTemp; 
rcTemp.BottomRight() = CPoint(cx, cy);
rcTemp.TopLeft() = CPoint(0, 0);
MoveWindow(&rcTemp);


方法二因为获得了窗口与屏幕的参数,所以当想调整Dialog上的一些控件位置时就方便许多。

 

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

不过呢,只能在OnSize里面自己调整控件的大小的位置,需要自己一个一个地调整所有需要调整的控件的大小和位置。

方法请看:

  三步解决MFC窗口变动后控件的大小

一 、在头文件中定义 POINT Old;//存放对话框的宽和高。
二 、添加 WM_SIZE消息:
三 、添加reseze函数


http://blog.csdn.net/Small_hunter/article/details/5640101
中有详细代码

posted @ 2012-10-24 16:48 盛胜 阅读(454) | 评论 (0)编辑 收藏

1. 在资源文件中添加Menu
void ClistbDlg::OnRButtonDown(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
CMenu menu;
menu.LoadMenu(IDR_MENU1);
CMenu* pPopup=menu.GetSubMenu(0);

          //ClientToScreen( )是把窗口坐标转换为屏幕坐标
          //ScreenToClient( )是把屏幕坐标转换为窗口坐标
          //屏幕坐标是相对于屏幕左上角的,而窗口坐标是相对于窗口用户区左上角的
ClientToScreen(&point);

        //该函数在指定位置显示快捷菜单,并跟踪菜单项的选择
          //TPM_LEFTBUTTON:若设置此标志,用户只能用鼠标左键选择菜单项。  
          //TPM_RIGHTBUTTON:若设置此标志,用户能用鼠标左、右键选择菜单项。
          //X:在屏幕坐标下,快捷菜单的水平位置。  
          //Y:在屏幕坐标下,快捷菜单的垂直位置。
pPopup->TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON,point.x,point.y,this);
CDialog::OnRButtonDown(nFlags, point);
}


 CMenu类的成员
  数据成员
  
m_hMenu 
指定附加给CMenu对象的窗口菜单的句柄
  构造函数
  
CMenu 
构造一个CMenu对象
  初始化
  
Attach 
附加一个Windows菜单句柄给CMenu对象 
Detach 
从CMenu对象中分离Windows菜单的句柄,并返回该句柄 
FromHandle 
返回一个指向给定Windows菜单句柄的CMenu对象的指针 
GetSafeHmenu 
返回由CMenu对象包含的m_hMenu值 
DeleteTempMap 
删除由FromHandle成员函数创建的所有临时CMenu对象 
CreateMenu 
创建一个空菜单,并将其附加给CMenu对象 
CreatePopupMenu 
创建一个空的弹出菜单,并将其附加给CMenu对象 
LoadMenu 
从可执行文件中装载菜单资源,并将其附加给CMenu对象LoadMenuIndirect从内存的菜单模板中装载菜单,并将其附加给CMenu对象 
DestroyMenu 
销毁附加给CMenu对象的菜单,并释放菜单占用的内存
  菜单操作
  
DeleteMenu 
从菜单中删除指定的项。如果菜单项与弹出菜单相关联,那么将销毁弹出菜单的句柄,并释放它占用的内存 
TrackPopupMenu 
在指定的位置显示浮动菜单,并跟踪弹出菜单的选择项
  菜单项操作
  
AppendMenu 
在该菜单末尾添加新的菜单项 
CheckMenuItem 
在弹出菜单的菜单项中放置或删除检测标记 
CheckMenuRadioItem 
将单选钮放置在菜单项之前,或从组中所有的其它菜单项中删除单选钮 
SetDefaultItem 
为指定的菜单设置缺省的菜单项GetDefaultItem获取指定的菜单缺省的菜单项 
EnableMenuItem 
使菜单项有效、无效或变灰GetMenuItemCount决定弹出菜单或顶层菜单的项数 
GetMenuItemID 
获取位于指定位置菜单项的菜单项标识 
GetMenuState 
返回指定菜单项的状态或弹出菜单的项数 
GetMenuString 
获取指定菜单项的标签GetMenuItemInfo获取有关菜单项的信息 
GetSubMenu 
获取指向弹出菜单的指针 
InsertMenu 
在指定位置插入新菜单项,并顺次下移其它菜单项 
ModifyMenu 
改变指定位置的已存在的菜单项 
RemoveMenu 
从指定的菜单中删除与弹出菜单相关联的菜单项 
SetMenuItemBitmaps 
将指定检测标记的位图与菜单项关联 
GetMenuCountextHelpID 
获取与菜单关联的帮助文本的ID号 
SetMenuCountextHelpID 
设置与菜单关联的帮助文本的ID号
  可覆盖的函数
  
DrawItem 
通过框架来调用,其发生于拥有者菜单的可视部分有所改变 
MeasureItem 
通过框架来调用,用于决定当创建了拥有者菜单时的菜单维数

posted @ 2012-10-24 10:47 盛胜 阅读(354) | 评论 (0)编辑 收藏

MFC ListBox(列表框)的使用

 

1添加数据

声明控件变量的类别为Control,变量类型为CListBox,变量名为m_ListBox_Content.

m_ListBox_Content.AddString(_T("123"));

m_ListBox_Content.AddString(_T("汉字"));

m_ListBox_Content.AddString(_T("English"));

m_ListBox_Content.AddString(_T("!@#$%^&*()"));

2获取数据

CString s;

m_ListBox_Content.GetText(1,s);

MessageBox(s,_T("取得第2行数据"),MB_OK);

s.ReleaseBuffer();

 

将会得到"汉字"这个字符串,如果没有得到"汉字"这个字符串,是因为ListBoxSort属性设为True.设为False之后就按照你编写的顺序写入.

 

3获取选择的数据

首先要将ListBoxSelection属性设置为Multiple;

int nSel;

nSel=m_ListBox_Content.GetCurSel();

CString s;

m_ListBox_Content.GetText(nSel,s);

MessageBox(s,_T("您选择的是"),MB_OK);

s.ReleaseBuffer();

 

 

4获取选择ListBox项的多个数据

 

首先要将ListBoxSelection的属性设置为Multiple

 

int nSel = m_ListBox_Content.GetSelCount();

CArray< int,int& > arrayListSel;

arrayListSel.SetSize(nSel);   

m_ListBox_Content.GetSelItems(nSel,arrayListSel.GetData());   

CString s = _T("");

for( int i=0; i< nSel; i++ )

{

m_ListBox_Content.GetText( arrayListSel[i], s);

MessageBox(s,_T("您选择的是"),MB_OK);

}

 

 

5双击删除所选项

添加一个ListBox的双击事件

m_ListBox_Content.DeleteString(m_ListBox_Content.GetCurSel());

 

posted @ 2012-10-23 08:54 盛胜 阅读(2127) | 评论 (0)编辑 收藏

MFC中有许多控件,将控件拖到窗口中右键鼠标,点击属性,到样式标签页中会有很多样式可以选择

但是往往这些样式会满足不了我们的需求,这时候,我们需要自己来完成我们想要的样式控件

我们就来拿ListBox为例子,因为我发现ListBox的样式扩展的需求量是最大的

(1)在Dialog中拖入ListBox控件

(2)在类视图添加一个该控件的子类

(3)然后按Ctrl+W在类向导中给你的控件加一个CColorListBox的变量

(4)可以开始为你的CColorListBox添加样式了

  1. int CColorListBox::AddMsg(CString lpszItem, DWORD info)  
  2. {  
  3.     int nItem = AddString(lpszItem);  
  4.     if (nItem >= 0)  
  5.         SetItemData(nItem,info);  
  6.     int numList = GetCount()-1;  
  7.     SetTopIndex(numList);  
  8.     SetCurSel(numList);  
  9.     //水平滚动  
  10.     int max_width=0;  
  11.     CSize sz;  
  12.     CClientDC dc(this);  
  13.     for(int i=0;i<GetCount();i++)  
  14.     {  
  15.         GetText(i,lpszItem);  
  16.         sz=dc.GetTextExtent(lpszItem);  
  17.         if(max_width<sz.cx)  
  18.             max_width=sz.cx;  
  19.     }  
  20.     SendMessage(LB_SETHORIZONTALEXTENT,max_width,0);  
  21.   
  22.     return nItem;  
  23. }  
  1. void CColorListBox::DrawItem(LPDRAWITEMSTRUCT lpDIS)   
  2. {  
  3.     // TODO: Add your code to draw the specified item  
  4.     if ((int)lpDIS->itemID < 0)  
  5.         return;   
  6.   
  7.     CDC *pDC = CDC::FromHandle(lpDIS->hDC);  
  8.   
  9.     COLORREF crText;  
  10.     CString sText;  
  11.     COLORREF crNorm;  
  12.     HICON icon;  
  13.     switch (lpDIS->itemData)  
  14.     {  
  15.         case M_OK:  
  16.             crNorm = #00ff00;  
  17.             icon = AfxGetApp()->LoadIcon(IDI_ICON_OK);  
  18.             break;  
  19.         case M_ERROR:  
  20.             crNorm=#ff0000;  
  21.             icon = AfxGetApp()->LoadIcon(IDI_ICON_ERROR);  
  22.             break;  
  23.         case M_WARING:  
  24.             crNorm=#0000ff;  
  25.             icon = AfxGetApp()->LoadIcon(IDI_ICON_WARING);  
  26.             break;  
  27.         case M_USER:  
  28.             crNorm=#00ff00;  
  29.             icon = AfxGetApp()->LoadIcon(IDI_ICON_USER);  
  30.             break;  
  31.         case M_USER_:  
  32.             crNorm=#000000;  
  33.             icon = AfxGetApp()->LoadIcon(IDI_ICON_USER_);  
  34.             break;  
  35.     }  
  36.   
  37.   
  38.     // 字符串颜色  
  39.     COLORREF crHilite = RGB(255-GetRValue(crNorm), 255-GetGValue(crNorm), 255-GetBValue(crNorm));  
  40.     CRect rectBK(lpDIS->rcItem.left+22,lpDIS->rcItem.top,lpDIS->rcItem.right+18,lpDIS->rcItem.bottom);  
  41.   
  42.   
  43.     // 如果被选中,使用高亮色会矩形  
  44.     if ((lpDIS->itemState & ODS_SELECTED) &&  
  45.          (lpDIS->itemAction & (ODA_SELECT | ODA_DRAWENTIRE)))  
  46.     {  
  47.         CBrush brush(crNorm);  
  48.         pDC->FillRect(rectBK, &brush);  
  49.     }  
  50.   
  51.     // 如果取消选中,恢复  
  52.     if (!(lpDIS->itemState & ODS_SELECTED) &&    (lpDIS->itemAction & ODA_SELECT))  
  53.     {  
  54.         CBrush brush(::GetSysColor(COLOR_WINDOW));  
  55.         pDC->FillRect(rectBK, &brush);  
  56.     }         
  57.   
  58.     // 绘制焦点矩形  
  59.     if ((lpDIS->itemAction & ODA_FOCUS) && (lpDIS->itemState & ODS_FOCUS))  
  60.         pDC->DrawFocusRect(&lpDIS->rcItem);   
  61.   
  62.     // 取消焦点矩形  
  63.     if ((lpDIS->itemAction & ODA_FOCUS) &&   !(lpDIS->itemState & ODS_FOCUS))  
  64.         pDC->DrawFocusRect(&lpDIS->rcItem);   
  65.   
  66.   
  67.     // 透明背景  
  68.     int nBkMode = pDC->SetBkMode(TRANSPARENT);  
  69.   
  70.       
  71.     if (lpDIS->itemData)       
  72.     {  
  73.         if (lpDIS->itemState & ODS_SELECTED)  
  74.             crText = pDC->SetTextColor(crHilite);  
  75.         else if (lpDIS->itemState & ODS_DISABLED)  
  76.             crText = pDC->SetTextColor(::GetSysColor(COLOR_GRAYTEXT));  
  77.         else  
  78.             crText = pDC->SetTextColor(crNorm);  
  79.     }  
  80.       
  81.     else  
  82.     {  
  83.         if (lpDIS->itemState & ODS_SELECTED)  
  84.             crText = pDC->SetTextColor(::GetSysColor(COLOR_HIGHLIGHTTEXT));  
  85.         else if (lpDIS->itemState & ODS_DISABLED)  
  86.             crText = pDC->SetTextColor(::GetSysColor(COLOR_GRAYTEXT));  
  87.         else  
  88.             crText = pDC->SetTextColor(::GetSysColor(COLOR_WINDOWTEXT));  
  89.     }  
  90.   
  91.   
  92.     // 显示字符串  
  93.     GetText(lpDIS->itemID, sText);  
  94.     CRect rect = lpDIS->rcItem;  
  95.   
  96.     // 字符格式  
  97.     UINT nFormat = DT_LEFT | DT_SINGLELINE | DT_VCENTER;  
  98.     if (GetStyle() & LBS_USETABSTOPS)  
  99.         nFormat |= DT_EXPANDTABS;  
  100.       
  101.   
  102.     pDC->DrawText(sText, -1, &rectBK, nFormat | DT_CALCRECT&DT_CENTER);  
  103.     pDC->DrawText(sText, -1, &rectBK, nFormat);  
  104.     DrawIconEx(lpDIS->hDC,rect.left+2,rect.top+1,icon,16,16,0,NULL, DI_NORMAL | DI_COMPAT);  
  105.   
  106.     pDC->SetTextColor(crText);   
  107.     pDC->SetBkMode(nBkMode);   
  108. }  

关于改变成什么样子的,就要好好运用windows编程里面的知识了

(5)最重要的一点:右键控件点开属性中的样式(Styles)将所有者下拉框改成可变的(variable)把有字符串(has strings)勾上
最终的效果是:

posted @ 2012-10-22 17:08 盛胜 阅读(547) | 评论 (0)编辑 收藏

Combo Box (组合框)控件很简单,可以节省空间。从用户角度来看,这个控件是由一个文本输入控件和一个下拉菜单组成的。用户可以从一个预先定义的列表里选择一个选项,同时也可以直接在文本框里面输入文本。下面的例子简要说明如何利用 MFC CComboBox Class来操作字符串列表。

1、定义控件对应变量

假定已经创建了一个Dialog,并且给该Dialog建立了类,并且从控件工具箱将 Combo Box 控件拖放到上面。打开 Class Wizard,添加控件对应变量,如:CComboBox m_cbExamble;在后面的代码中会不断使用这个变量。

为该下拉框建立相应的响应函数,该响应函数应该是在Dialog建立的类下

2、向控件添加 Items

       1) 在Combo Box控件属性的Data标签里面添加,一行表示Combo Box下拉列表中的一行。换行用ctrl+回车。

2) 利用函数 AddString() 向 Combo Box 控件添加 Items,如:

m_cbExample.AddString(“StringData1”);

m_cbExample.AddString(“StringData2”);

m_cbExample.AddString(“StringData3”);

3) 也可以调用函数 InsertString() 将 Item 插入指定位置 nIndex,如:

m_cbExample.InsertString( nIndex, “StringData” );

为了使添加Items后光标会停留在第一个Items上可以用m_cbExample.SetCurSel(0);来实现

3、从控件得到选定的Item

假设在控件列表中已经选定某项,现在要得到被选定项的内容,首先要得到该项的位置,然后得到对应位置的内容。这里会用到两个函数,如:

int nIndex = m_cbExample.GetCurSel();

CString strCBText;

m_cbExample.GetLBText( nIndex, strCBText);

这样,得到的内容就保存在 strCBText 中。

若要选取当前内容,可调用函数GetWindowText(strCBText)。

4、在控件中查找给定Item

这种操作一般用于在程序中动态修改控件中该项的值,可以用函数FindStringExact() 精确匹配,如:

int nIndex = m_cbExample.FindStringExact( nStartAfter, “value to be found”);

nStartAfter指明从哪一行开始查找。如果查找成功,返回的是该项的位置;否则,返回CB_ERR。

也可以选中包含指定字符串的项,如:

int nIndex = m_cbExample.SelectString( nStartAfter, “value to be selected”);

5、删除控件中的Item

该操作可以利用函数DeleteString(),需要指定被删除项的位置,如:

m_cbExample.DeleteString(nIndex);

也可以使用函数ResetContent(),清除目前的所有项,如:

m_cbExample.ResetContent();

6、显示控件中的某项

int nIndex = m_cbExample.GetCurSel(); //当前选中的项

m_cbExample.SetCurSel(nIndex); //设置第nIndex项为显示的内容

7、得到或设置输入框中被选中的字符位置

DWORD GetEditSel( ) /BOOL SetEditSel( int nStartChar, int nEndChar );

BOOL LimitText( int nMaxChars ); 设置输入框中可输入的最大字符数。

8、列表框常用消息映射宏

ON_CBN宏对应事件
ON_CBN_CLOSEUP关闭下拉列表。
ON_CBN_DBLCLK双击下拉列表中的项目。
ON_CBN_DROPDOWN下拉显示列表框。
ON_CBN_EDITCHANGE编辑框中文本内容被改动。
ON_CBN_EDITUPDATE编辑框内容更新显示。
ON_CBN_ERRSPACE组合框不能为某个特殊请求分配足够的内存。
ON_CBN_SELENDCANCEL用户的选择被取消。
ON_CBN_SELENDOK用户选择了一个项目并且通过回车键或按下鼠标而隐藏组合框的下拉列表。
ON_CBN_KILLFOCUS组合框失去焦点。
ON_CBN_SELCHANGE选择发生变化。
ON_CBN_SETFOCUS组合框获得输入焦点。


窗口风格
窗口风格说明
CBS_AUTOHSCROLL当在行尾输入字符时自动将编辑框中的文字向右滚动。
CBS_DROPDOWN同CBS_SIMPLE风格类似,只是只有在用户点击下拉图标时才会显示出下拉列表。
CBS_DROPDOWNLIST同CBS_DROPDOWN类似,只是显示当前选项的编辑框为一静态框所代替。
CBS_HASSTRINGS创建一个包含了由字串组成的项目的拥有者画组合框。
CBS_OEMCONVERT将组合框中的ANSI字串转化为OEM字符。
CBS_OWNERDRAWFIXED由下拉列表框的拥有者负责对内容的绘制;列表框中各项目高度相同。
CBS_OWNERDRAWVARIABLE由下拉列表框的拥有者负责对内容的绘制;列表框中各项目高度可以不同。
CBS_SIMPLE下拉列表始终显示。
CBS_SORT自动对下拉列表中的项目进行排序。
CBS_DISABLENOSCROLL当下拉列表显示内容过少时显示垂直滚动条。
CBS_NOINTEGRALHEIGHT在创建控件时以指定的大小来精确设定组合框尺寸。

posted @ 2012-10-22 11:46 盛胜 阅读(12442) | 评论 (0)编辑 收藏

仅列出标题
共14页: First 5 6 7 8 9 10 11 12 13 Last