1. 经常看到有网卡的计算机启动时,看到屏幕的左下方有一个“米形状”的字符在旋转,怎么实现的呢?
char sym1[4] = {'-', '\\', '|', '/'};//定义变量 //在定时器里显示上述各个下标值即可: void CTestDlg::OnTimer(UINT nIDEvent) { // TODO: Add your message handler code here and/or call default if (nIDEvent == m_Timer) { k++; if (k%4 == 0) { k = 0; } str = sym1[k]; SetDlgItemText(IDC_STATIC1, str); } CDialog::OnTimer(nIDEvent); }
2. 在VC对话框程序里,如果在第一个界面上,假设摆放了几个按钮,但又需要此对话框铺满整张“图片”,上面的按钮就会被放置于其下而看不到,怎么让它们在运行起来,置于图片之上可见又可用呢?
a .最快的办法是:Ctrl+D设置控件显示Tab的顺序,让“图片”控件Tab值小于按钮控件即可实现(意义是先显示“图片”控件,后显示按钮控件)
b. 使用程序:(不推荐!)
//在定时器里面处理 void CTesterDlg::OnTimer(UINT nIDEvent) { // TODO: Add your message handler code here and/or call default CRect rc; int i = 0; for (i = IDC_BUTTON1; i<=IDC_BUTTON5; i++) { GetDlgItem(i)->GetClientRect(&rc); GetDlgItem(i)->InvalidateRect(&rc, FALSE); } CDialog::OnTimer(nIDEvent); }
// // 处理OnClickList事件 // m_ListCtlTest 是CXlistCtrl的控件变量 // void CTestDlg::OnClickListTest(NMHDR* pNMHDR, LRESULT* pResult) { LPNMITEMACTIVATE pNMIA = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR); int i = -1, j = -1; if (pNMIA) { i = pNMIA->iItem; j = pNMIA->iSubItem; } if (i >= 0 && j >= 0) { //得到鼠标当前点 CPoint pt; GetCursorPos(&pt); //得到单元格的坐标 CRect rcSub; //单元格的RC CRect rcTest; //整个列表控件的RC m_ListCtlTest.GetSubItemRect(i, j, 0, rcSub); m_ListCtlTest.GetWindowRect(&rcTest); rcSub += rcTest; //鼠标落在单元格内 if (rcSub.PtInRect(pt)) { //在此处理...... } } *pResult = 0; }
m_ListCtrl.SetItem(index, 0, LVIF_STATE, NULL, 0, LVIS_SELECTED, LVIS_SELECTED, 0);//设置列表当前选择状态 m_ListCtrl.EnsureVisible(index, TRUE);//始终可见
//p指向处理的字符串 while (*p && isspace(*p)) p++;
要是使用MFC,直接使用CString::Replace(" ", "")即可!
6. CBitmapButton使用时,要将ID资源:
一般在对话框的初始化函数中:
m_bt.AutoLoad(IDC_BUTTON1, this); m_bt.LoadBitmaps(IDB_BITMAP_UP, IDB_BITMAP_DN);//第一幅为正常显示的图片资源,第二幅为按下时的图片资源 m_bt.SizeToContent();
如果实现像CToolBarCtrl一样的功能,可以在单击事件中:
void CTestDlg::OnButton1() { m_bt.SetState(m_bState); m_bState = !m_bState; //m_bState是BOOL成员变量,初始化时为TRUE,每次翻转 }