注册 登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

逍遥子 曰:

得失失得 何必患得患失 舍得得舍 不妨不舍不得

 
 
 

日志

 
 

MFC 常见窗口操作[原]  

2013-03-14 16:16:44|  分类: C/C++ |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

1、改变窗口大小或全屏窗口可用下面的代码:

MoveWindow(hDlg,0,0,GetSystemMetrics(SM_CXSCREEN),GetSystemMetrics(SM_CYSCREEN),TRUE);  

2、去掉窗口的边框可用下面的代码:

LONG nStyle= GetWindowLong( hDlg, GWL_STYLE);
LONG newStyle= nStyle & (~(WS_CAPTION | WS_BORDER |WS_EX_CLIENTEDGE)); 
SetWindowLong( hDlg, GWL_STYLE, newStyle);

3、在桌面上画图(直线、圆之类),可仿写如下代码:
CWindowDC pDC(GetDesktopWindow());
CBrush *pBrush=CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH));
CBrush *pOldBrush=pDC.SelectObject(pBrush);
pDC.Ellipse(CRect(fCx-fR, fCy-fR, fCx+fR,fCy+fR));

pDC.SelectObject(pOldBrush);
ReleaseCapture();
需注意:3是在对话框里调用,如果在非对话框中调用CWindowDC pDC(GetDesktopWindow()),则会提示GetDesktopWindow()无法转换成CWnd*的编译错误,再看GetDesktopWindow()的定义:
_AFXWIN_INLINE CWnd* PASCAL CWnd::GetDesktopWindow()
{ return CWnd::FromHandle(::GetDesktopWindow()); }
可见GetDesktopWindow()内部调用的是Cwnd的成员函数FromHandle,如果你调用GetDesktopWindow()的地方不再Cwnd或其派生类中,肯定编译不过,此时的解决办法是直接调用CWnd::FromHandle(::GetDesktopWindow())而不是GetDesktopWindow();也即:档你的代码不是在Cwnd及其派生类中时,需如下写:
CWindowDC pDC(CWnd::FromHandle(::GetDesktopWindow()));
CBrush *pBrush=CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH));
CBrush *pOldBrush=pDC.SelectObject(pBrush);
pDC.Ellipse(CRect(fCx-fR, fCy-fR, fCx+fR,fCy+fR));

pDC.SelectObject(pOldBrush);
ReleaseCapture();

4、下面的代码可以通过窗口的名字找到窗口对象并将其置顶
CWnd*m_TestWnd =  FindWindow(NULL,_T("Hello,Test window"));
 if (NULL != m_TestWnd )
 {
 m_TestWnd ->ShowWindow(SW_HIDE);
 }
上述代码可以将窗口隐藏,如果将隐藏的窗口显示则调用ShowWindow(SW_SHOWNORMAL);

5、将某窗口置顶,需要窗口句柄作为参数
::SetForegroundWindow(m_pTestDlg->m_hWnd);

6、下面的代码可以让整个桌面重绘
::InvalidateRect(NULL,&CRect(0,0,GetSystemMetrics(SM_CXSCREEN),GetSystemMetrics(SM_CYSCREEN)),FALSE);

7、下面的代码可以让代码所在的对话框重绘
UpdateWindow();

8、下面的代码可以在按钮操作之后修改其caption
CString csValue;
GetDlgItemText(IDC_BTN_VIDEO_CAP,csValue);
if (_T("拍摄") == csValue)
{
GetDlgItem(IDC_BTN_VIDEO_CAP)->SetWindowText(_T("停止"));
......

else
{
GetDlgItem(IDC_BTN_VIDEO_CAP)->SetWindowText(_T("拍摄"));
......
}

9、向指定窗口发送消息
PostThreadMessage(m_nThreadID,MSG_2_THREAD_DEBUG_MODEL,0,0)
  评论这张
 
阅读(627)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018