您的位置:首页 > 其它

VC一些经验系列:《平均绘画矩形图,双击全屏》

2013-11-15 11:28 176 查看
1.RGB宏报错

RGB宏是这样的,

#define RGB(r,g,b) ((COLORREF)(((BYTE)(r)|((WORD)((BYTE)(g))<<8))|(((DWORD)(BYTE)(b))<<16)))

但是penBlack.CreatePen(PS_SOLID, 3, #ff0000); 在有的文件中可以用,有的文件中会报错【error C2064: 项不会计算为接受 1 个参数的函数】

我猜应该是编译器,包含的括号运算有一定的限制导致的。

所以改成((COLORREF)(((255)|((WORD)((0))<<8))|(((DWORD)(0))<<16))); //(BYTE) 删除就可以了

//draw rectangle
dc.SelectStockObject(NULL_BRUSH); //不使用画刷

CPen penBlack;

    //penBlack.CreatePen(PS_SOLID, 3, #ff0000);
COLORREF crColor = ((COLORREF)(((255)|((WORD)((0))<<8))|(((DWORD)(0))<<16)));
penBlack.CreatePen(PS_SOLID, 3, crColor);

CPen* pOldPen = dc.SelectObject(&penBlack);
dc.Rectangle(CRect(WndRect.left -2,WndRect.top -2, WndRect.right+1,WndRect.bottom+1));

2. 给出窗口的总数,计算每行要画多少窗口

//计算每行窗口的个数 //1 4 9 16 32 64 128 256
float fMaxWndNumOfRow = sqrt((float)nNumOfLVWnd);
long nTemp = fMaxWndNumOfRow;
int nMaxWndNumOfRow = fMaxWndNumOfRow>nTemp?nTemp+1:nTemp;

3. 得到每行的窗口数量之后,就可以按照比例 1*1 , 2*2, 3*3, 4*4, 5*5, 6*6,来画图了

void CLiveViewWnd::OnLButtonDblClk(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
CMainDialog* mainDialog = NULL;
mainDialog = (CMainDialog*) GetParent();
mainDialog->nChooseWnd = m_ucWndNo;

CStatic::OnLButtonDblClk(nFlags, point);
OutputDebugString(L"enter =====================CLiveViewWnd::OnLButtonDblClk");

m_bFullScreen=!m_bFullScreen; // 设置全屏显示标志
LONG style = ::GetWindowLong(this->m_hWnd,GWL_STYLE);

if(m_bFullScreen)//全屏显示
{
/*   //用MFC隐藏系统任务栏
CWnd * wnd = FindWindow(L"Shell_TrayWnd",NULL);
wnd->SetWindowPos(NULL,0,0,0,0,SWP_HIDEWINDOW);
*/

m_hWndParent=::GetParent(m_hWnd);
::ShowWindow(m_hWndParent,SW_HIDE);

::SetParent(m_hWnd,NULL);
style &= ~(WS_DLGFRAME | WS_THICKFRAME);

SetWindowLong(this->m_hWnd,NULL, style);//SetWindowLong(this->m_hWnd,GWL_STYLE, style); GWL_STYLE表示MFC窗口属性,NULL表示没有窗口属性。
this->ShowWindow(SW_SHOWMAXIMIZED);//this->ShowWindow(SHOW_FULLSCREEN);

//CRect rect;
//this->GetWindowRect(&rect);
//::SetWindowPos((this->m_hWnd,HWND_NOTOPMOST,rect.left-1, rect.top-1, rect.right-rect.left + 3, rect.bottom-rect.top + 3, SWP_FRAMECHANGED);

int   nScreenWidth=GetSystemMetrics(SM_CXSCREEN);
int   nScreenHeight=GetSystemMetrics(SM_CYSCREEN);
::SetWindowPos(this->m_hWnd,HWND_TOPMOST,0,0, nScreenWidth,nScreenHeight, SWP_FRAMECHANGED);
}
else
{
/* //用MFC显示系统任务栏
CWnd * wnd = FindWindow(L"Shell_TrayWnd",NULL);
wnd->SetWindowPos(NULL,0,0,0,0,SWP_SHOWWINDOW);
//this->SetWindowPos(NULL,0,0,0,0,SWP_SHOWWINDOW);
*/

style |= WS_DLGFRAME | WS_THICKFRAME;
SetWindowLong(this->m_hWnd, NULL, style);
::SetParent(m_hWnd,m_hWndParent);
::ShowWindow(m_hWndParent,SW_SHOW);
}
}


OnLButtonDblClk

需要注意的是

SetWindowLong(this->m_hWnd,GWL_STYLE, style); // GWL_STYLE表示MFC窗口属性,NULL表示没有窗口属性。

SetWindowPos(this->m_hWnd,HWND_TOPMOST,0,0, nScreenWidth,nScreenHeight, SWP_FRAMECHANGED); //HWND_TOPMOST 显示优先级为最高层
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: