标签归档:VC++

MFC快捷菜单、工具条、对话框、标题栏

建立单文档应用程序

在窗格显示时间(Frame类里)
CTime time;
time = CTime::GetCurrentTime();
CString s=time.Format(“%H:%M:%S”);
m_wndStatusBar.SetPaneText(m_wndStatusBar.CommandToIndex(ID_INDICATOR_TIME),s);
CFrameWnd::OnTimer(nIDEvent);

点击弹出对话框(view类里)
CModalDialog *dlg = new CModalDialog;
dlg->Create(IDD_DIALOG,this);
dlg->ShowWindow(SW_SHOW);

右键菜单(快捷菜单)(view类里)
CMenu popup;
popup.LoadMenu(IDR_MENU_RIGHT);
CMenu *pop=popup.GetSubMenu(0);
ClientToScreen(&point);
pop->TrackPopupMenu(TPM_RIGHTBUTTON | TPM_LEFTALIGN,point.x,point.y,this);
CView::OnRButtonDown(nFlags, point);

修改标题栏图标(Frame类里)
HICON m_hIcon;
m_hIcon = AfxGetApp()->LoadIcon(IDI_ICON1);
SetIcon(m_hIcon, read more

MFC限制鼠标区域、画橡皮条线、任务栏显示图标、核对标记、文档背景色

限制鼠标活动区域
可以写在view类的OnMouseMove中添加如下代码
if (nFlags&&MK_LBUTTON)
{
CWnd *hwnd = GetActiveWindow();
CRect rect;
hwnd->GetWindowRect(&rect);
ClipCursor(&rect);
}
当要恢复鼠标使用范围时调用ClipCursor(NULL);即可。

还有SetCapture()和ReleaseCapture()的使用

画弹性橡皮线
在view类里响应左键单击,以及鼠标移动和左键弹起消息
鼠标移动
CClientDC dc(this);
dc.SetROP2(R2_NOT);
dc.MoveTo(oldPoint);
dc.LineTo(newPoint);

dc.MoveTo(oldPoint);
dc.LineTo(point);

newPoint = point;
左键按下只需记录坐标点,鼠标弹起只需画线。
当要画其它图形时要麻烦很多,因为在鼠标移动时要用到画刷

画矩形
if (GetCapture()==this&& nFlags && MK_LBUTTON)
read more

MFC对话框置顶 SetWindowPos()的用法

当你建立了一个基本对话框应用程序时,设置对话框置顶,可以在初始化对话框函数或者在消息响应函数里添加以下语句 设置置顶: SetWindowPos(&wndTopMost,0,0,0,0, SWP_NOMOVE | SWP_NOSIZE); 取消置顶: SetWindowPos(&wndNoTopMost,0,0,0,0, SWP_NOMOVE | SWP_NOSIZE); 不需做任何修改即可完成。 当建立的是单文档应用程序时,要在前面多一个窗口句柄函数。 下面是更详细的说明: 函数名:  SetWindowPos头文件:  winuser.h

函数原型:

BOOL SetWindowPos
(
HWND hWnd, //窗口句柄
HWND hWndInsertAfter, //排列顺序的句柄
int X, //水平坐标
int Y, //垂直坐标
int cx, //宽
int cy, //高
UINT uFlags //窗口定位标识
);

说明:

这个函数能改变窗口的大小、位置和设置子窗口、弹出窗口或顶层窗口的排列顺序。
返回值:

BOOL,如果返回值非零表示成功,返回零表示失败。错误信息请参看GetLastError函数。

参数表:

参数 类型及说明
hwnd HWND,欲定位的窗口句柄
hWndInsertAfter HWND,置于hwnd前面的窗口句柄。这个参数必须是窗口的句柄或是下面的值之一:    HWND_BOTTOM 将窗口置于其它所有窗口的底部
HWND_NOTOPMOST 将窗口置于其它所有窗口的顶部,并位于任何最顶部窗口的后面。如果这个窗口非顶部窗口,这个标记对该窗口并不产生影响
read more