11.1.2 客户端(2)

2013-10-07 13:02:59 · 作者: · 浏览: 63

11.1.2  客户端(2)

(3)在对话框的初始化函数OnInitDialog()中,调用函数SendMessage()向主窗口发送消息WM_SETICON设置该对话框的图标。代码如下:

  1. BOOL CQQDlg::OnInitDialog()                 //对话框初始化函数  
  2. {  
  3.     CDialog::OnInitDialog();  
  4.     SetIcon(m_hIcon, TRUE);  
  5.     SetIcon(m_hIcon, FALSE);  
  6.     ::SendMessage(this->m_hWnd,WM_SETICON,0,(unsigned int)m_hIcon);  
  7.                     //向对话框发送设置图标的消息  
  8.     return TRUE;  
  9.  } 

(4)用户保存,并且编译运行程序,结果如图11.18所示。

到这里为止,用户已经成功地为应用程序添加了QQ图标。

3.列表控件初始化

当实例程序启动时,列表控件的初始化工作主要是显示列表控件的标题以及好友列表。所以,用户需要在实例工程中插入位图资源,并将其命名为IDB_BITMAP1,如图11.19所示。

 
图11.18  设置实例程序的图标
 
(点击查看大图)图11.19  插入的位图资源
位图资源插入成功后,用户便可以在对话框初始化函数中添加代码。代码如下:
  1. BOOL CQQDlg::OnInitDialog()  
  2. {  
  3.     CDialog::OnInitDialog();  
  4.     ...             //省略部分代码  
  5.     CImageList *img;//定义图像列表指针  
  6.     img=new CImageList();                   //创建图像列表对象  
  7.     img->Create(32,32,ILC_COLOR4,3,2);  
  8.     img->Add(&m_bit,RGB(255,0,255));        //向图
    像列表中添加图像  
  9.     LVCOLUMN lv;    //定义列表结构体变量  
  10. lv.mask=LVCF_TEXT|LVCF_FMT|LVCF_WIDTH|LVIF_IMAGE;  
  11.                     //初始化该结构体中的成员  
  12. lv.fmt=LVCFMT_CENTER;  
  13. lv.pszText="      好友列表";                    //设置列表标题  
  14. lv.cx=140;          //指定该列宽度  
  15. m_list.InsertColumn(0,&lv);                 //插入列表标题  
  16. m_list.SetImageList(img,LVSIL_SMALL);       //设置图像列表  
  17. CString str[7];  
  18. for(int i=0;i<7;i++)  
  19. {  
  20. recv(s,str[i].GetBuffer(1),sizeof(str[i]),NULL);//接
    收服务器发送的好友列表  
  21. m_list.InsertItem(i,str[i],i);              //向列
    表控件中添加项目  
  22. }  
  23. return TRUE;  

在代码中,函数SetImageList()的作用是将图像列表以指定方式显示到列表控件中。其原型如下:

  1. CImageList* SetImageList( CImageList* pImageList, int nImageList );

该函数有两个参数。其中,参数pImageList指向CImageList类的指针;参数nImageList表示显示的方式,其值如表11.3所示。

表11.3  图像列表在列表控件中的显示方式

 < xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

LVSIL_NORMAL

以大图显示

LVSIL_SMALL

以小图显示

LVSIL_STATE

以固定大小进行显示


用户将上面的代码编译、运行后,结果如图11.20所示。

 
图11.20  在列表中显示位图资源

4.设置对话框背景

用户可以从资源文件中,插入一幅位图作为程序界面的背景,将资源ID修改为IDB_BITMAP2。首先,在对话框类中声明设备句柄dc1。代码如下:

  1. class CQQDlg : public CDialog  
  2. {  
  3. public:  
  4.     ...//省略部分代码  
  5.     HDC dc1;                    //声明设备句柄  
  6.  } 

然后,在函数OnPaint()中,创建一个与对话框设备环境相兼容的DC句柄并返回。利用这个返回的兼容设备DC,用户便可以将载入的位图资源放入该兼容DC中。最后,调用函数StretchBlt()将兼容DC中的位图资源复制到对话框的实际DC中显示。代码如下:

  1. void CQQDlg::OnPaint()  
  2. {  
  3. ... //省略部分代码  
  4. m_bit1.LoadBitmap(IDB_BITMAP2);                 //载入位图资源  
  5. dc1=::CreateCompatibleDC(::GetDC(this->m_hWnd));    //创建兼容DC  
  6. ::SelectObject(dc1,m_bit1.m_hObject);              
    //选取位图到兼容DC中  
  7. ::StretchBlt(::GetDC(this->m_hWnd),0,0,500,650,
    dc1,0,0,300,300,SRCCOPY);  
  8.     //复制位图资源