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);
另一种方法:在窗口=》属性中Border属性中选择none即可。
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、下面的代码可以让代码所在的对话框重绘
InvalidateRect(NULL);
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)
10、设置窗口透明度
(1)设置窗口的WS_EX_LAYERED属性,使用函数SetWindowLong
(2)设置窗口的透明度,使用函数SetWindowLong
例如:
BOOL CDlgMain::OnInitDialog()
{
CDialog::OnInitDialog();
// TODO: 在此添加额外的初始化
SetWindowLong(m_hWnd,GWL_EXSTYLE, GetWindowLong(m_hWnd, GWL_EXSTYLE) | WS_EX_LAYERED);
SetLayeredWindowAttributes(0,0, LWA_ALPHA);
...
}
11、获取指定窗口的句柄
GetDlgItem(IDC_STATIC_VIDEO)->GetSafeHwnd()
12、List Control 用法
CListCtrl m_TransList;
.......
m_TransList.ModifyStyle(0,LVS_REPORT|LVS_SINGLESEL|LVS_SHOWSELALWAYS);
m_TransList.SetExtendedStyle(m_TransList.GetExtendedStyle()|LVS_EX_GRIDLINES);
m_TransList.InsertColumn(0,L"课程名称",LVCFMT_CENTER,160);
m_TransList.InsertColumn(0,L"课程/事务类别",LVCFMT_CENTER,80);
m_TransList.InsertColumn(0,L"事务名称",LVCFMT_CENTER,160);
m_TransList.InsertColumn(0,L"登陆学生数",LVCFMT_CENTER,80);
m_TransList.InsertColumn(0,L"当前状态",LVCFMT_CENTER,80);
m_TransList.InsertColumn(0,L"上课开始时间",LVCFMT_CENTER,160);
m_TransList.InsertColumn(0,L"上课结束时间",LVCFMT_CENTER,160);
m_TransList.InsertColumn(0,L"频道ID",LVCFMT_CENTER,80);
m_TransList.InsertColumn(0,L"事务ID",LVCFMT_CENTER,80);
int icounter =0;
TransInform temp_translist;
map<CString,TransInform>::const_iterator map_it =Global_TranList.begin();
for(;map_it!=Global_TranList.end();icounter++,map_it++)
{
temp_translist.Clear();
temp_translist =map_it->second;
m_TransList.InsertItem(icounter,temp_translist.m_ChnID);//在每一行的开始的第一列必须用InsertItem函数,该行的以后的各列用函数SetItemText
//AfxMessageBox(temp_translist.m_ChnID);
m_TransList.SetItemText(icounter,1,temp_translist.m_TransID);
m_TransList.SetItemText(icounter,2,temp_translist.m_CourseName);
m_TransList.SetItemText(icounter,3,temp_translist.m_Type);
m_TransList.SetItemText(icounter,4,temp_translist.m_TransName);
m_TransList.SetItemText(icounter,5,temp_translist.m_StuNum);
m_TransList.SetItemText(icounter,6,temp_translist.m_State);
m_TransList.SetItemText(icounter,7,temp_translist.m_StartTime);
m_TransList.SetItemText(icounter,8,temp_translist.m_EndtTime);
}
13、窗体最大化
int iSX = GetSystemMetrics(SM_CXSCREEN);
int iSY = GetSystemMetrics(SM_CYSCREEN);
iSY -= 26;
::SetWindowPos(m_hWnd, HWND_TOP, 0, 0, iSX, iSY, SWP_SHOWWINDOW);
14、MFC中如何擦除在桌面上的绘图?
//获取屏幕的长度和宽度
int iWidth = GetSystemMetrics(SM_CXSCREEN); //
int iHeight = GetSystemMetrics(SM_CYSCREEN);
::InvalidateRect(NULL,&CRect(0,0,iWidth,iHeight),FALSE);//重绘该区域