控件技巧

1 如果控件相互遮挡,则可通过传递消息的方式来响应操作
SendMessage消息
::SendMessage(hwnd, WM_SETTEXT,   0,   "hello ") 
GetParent()->SendMessage(WM_LBUTTONUP, (WPARAM)this->m_hWnd); //发送消息至父窗口

2 对话框指针传递

//得到主对话框指针(在子对话框类中取得)
CMyDlg *pMainDlg = (CmyDlg *)AfxGetMainWnd();
//得到主对话框中非模态对话框指针
CChildDlg *pChildDlg = pMainDlg->m.dlg;
//得到列表控件指针
CListCtrl *plistCtrl = (ClistCtrl*)pChildDlg->GetDlgItem(IDC_LIST1);

3  修改标题栏和AfxmessageBox标题栏

Resources的String Table中AFX_IDS_APP_TITLE就是AfxMessageBox标题栏的要显示的标题,

可以直接修改里面的字符串就可以了.

4 对失去焦点的指定控件进行处理

//处理消息
BOOL CBMotorsettingdlg::OnCmdMsg(UINT nID, int nCode, void* pExtra, AFX_CMDHANDLERINFO* pHandlerInfo)
{
    //对控件ID进行判断
    switch(nID)
    {
    case IDC_ORG_U:
        if(nCode == EN_SETFOCUS || nCode == EN_KILLFOCUS)//失去焦点
            UpdateData();
        return true;
    default:
        break;
    }
    return CDialog::OnCmdMsg(nID, nCode, pExtra, pHandlerInfo);
}

5 TAB键切换属性页对话框无效

经过检查,属性页对话框的基类为CPropertyPage ,改为CDialog即可

6 避免在属性页对话框中按回车或ESC也会响应退出

Esc键也可以触发对OnCancel函数的调用。

它将导致控制从对话框中退出。

不过可以像对OK按钮一样处理,通过设置一个无效的OnCancel函数来

防止这一情况的出现。

7 获得对话框的背景色 

GetSysColor(COLOR_BTNFACE)

8 右上角关闭按钮响应函数处理

void CPrinterUpdateDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
  if ((nID & 0xFFF0)==SC_CLOSE)
    {
	OnClose(); 
    }
  else
    {
	CDialogEx::OnSysCommand(nID, lParam);
    }
}

9 同时响应多个ID的菜单消息

ON_COMMAND_RANGE(ID_VIEW_APPLOOK_WIN_2000, ID_VIEW_APPLOOK_OFF_2007_AQUA, &CMainFrame::OnApplicationLook)
ON_UPDATE_COMMAND_UI_RANGE(ID_VIEW_APPLOOK_WIN_2000, ID_VIEW_APPLOOK_OFF_2007_AQUA, &CMainFrame::OnUpdateApplicationLook)

10 只显示对话框的一部分

在OnInitDialog中加入

CRect smallRect;
GetWindowRect(&smallRect);
CRect bottomRect;
GetDlgItem(IDC_SEPRATOR)->GetWindowRect(&bottomRect);
smallRect.bottom = bottomRect.bottom;
SetWindowPos(NULL, 0, 0, smallRect.Width(), smallRect.Height(), SWP_NOMOVE | SWP_NOZORDER);

11 手动添加的菜单响应方法

手动添加的菜单通过一般的响应方法是没有回应的,必须自己操作

CMenu* pMenu = GetMenu()->GetSubMenu(1);
pMenu->CheckMenuItem(ID_SCHINESE, m_iLanguage == LAN_SCHINESE ? MF_CHECKED : MF_UNCHECKED);

12 非模态对话框居中显示

在初始化对话框时加入 centerWindow()

未完待续...

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值