[置顶] MFC代码片段备忘(不断更新)

1.想鼠标在窗口客户区移动窗口,只需要在OnNcHitTest消息中,如果遇到HTCLIENT消息,则把它改为HTCAPTION消息即可。如SetWindowRgn设置窗体形状后,使用此消息。

LRESULT CShadeWindowDlg::OnNcHitTest(CPoint point)
{
    // TODO: 在此添加消息处理程序代码和/或调用默认值

    UINT nHitTest=CDialog::OnNcHitTest(point);
    return (nHitTest==HTCLIENT)?HTCAPTION:nHitTest;

}

 

 

2.可以使用CToolTipCtrl来管理按钮提示,很方便!

 

步骤1:声明CToolTipCtrl对象

步骤2: EnableToolTips(TRUE);父类允许使用

            m_tipCtrl.Create(this);
            m_tipCtrl.Activate(TRUE);

            m_tipCtrl.SetDelayTime(200);// 设置延时

            m_tipCtrl.AddTool(GetDlgItem(IDC_BUTTON),(LPCTSTR)“提示“);//给特定的按钮加提示

步骤3:重载PreTranslateMessage,在里面加上一句m_tipCtrl.RelayEvent(pMsg);

完了,挺方便。

 

3.Dialog中OnOK,OnCancel,OnClose,OnDestroy消息传到方向
1. 点“确定”、“取消”时的关闭路由为
OnOK()或OnCancel() ---> EndDialog() ---> DestroyWindow() ---> OnDestroy() ---> PostNcDestroy()
2. 点“关闭”标题栏按钮的关闭路由为
OnClose()---> DestroyWindow() ---> OnDestroy() ---> PostNcDestroy()

 

另外,在程序里面如果用一个函数去直接调用CDialog::OnClose(),也是不会关闭程序的。暂时还不知为什么。想关闭对话框,就SendMessage(WM_CLOSE)

 

4.任务栏添加图标

用到NOTIFYICONDATA 以及Shell_NotifyIcon。

typedef struct _NOTIFYICONDATA {
  DWORD cbSize;//Size of this structure, in bytes. 
  HWND hWnd; //Handle to the window that receives notification messages 
  UINT uID; //Application-defined identifier of the taskbar icon
  UINT uFlags; //which to contain valid data,NIF_ICON,NIF_MESSAGE,NIF_TIP
  UINT uCallbackMessage; //uses this identifier for notification messages that it sends to the window identified in hWnd
  HICON hIcon; //Handle to the icon to add, modify, or delete.
  WCHAR szTip[64]; //ToolTip text to display for the icon.
} NOTIFYICONDATA, *PNOTIFYICONDATA;

 

 

按msdn要求,用设置好的pnid传入Shell_NotifyIcon就可以了。

 

5.CButton中设置bitmap,先在Create中加上BS_BITMAP, 然后构建一个CBitmap对象,使用LoadBitmap加载,在SetBitmap。注意CBitmap不能是局部变量,如果在函数中声明,超过作用域的时候会被栈清空,资源回收,在按钮上只能见到白白的一遍了。

msdn例子如下,不知为啥是行不通的。

myButton.SetBitmap( ::LoadBitmap(NULL, MAKEINTRESOURCE(OBM_CHECK)) );

 

WINSHELLAPI BOOL WINAPI Shell_NotifyIcon(
  DWORD dwMessage, //NIM_ADD,NIM_DELETE,NIM_MODIFY
  PNOTIFYICONDATA pnid
);

 

 

6.CListCtrl的最左一列只能按左对齐,如果想按右对齐,只能InsertColumn的nCol从1开始。很奇怪msdn没有的,高人指点,稍微记录备忘。

你可能感兴趣的:([置顶] MFC代码片段备忘(不断更新))