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,来画图了
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 显示优先级为最高层
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 显示优先级为最高层
相关文章推荐
- VC一些经验系列: 《分享泄漏检测工具:内存、DC、GDI、Handle... 》
- 一些基础:VC编程经验和错误
- 项目管理系列:项目团队建设的一些经验
- vc实现窗口全屏的一些方法
- 【IT系列之8】谈谈创业融资的一些经验
- 关于H3C和华为Wvrp系列模拟器的一些经验
- 有关VC++编程的一些经验
- 做网赚的一些经验和技巧——网赚系列
- VC ActiveX(ocx)双击全屏(C++版)
- vc 系列~~~音乐播放器的一些基本播放
- 从VC 6.0移植代码到VS C++ 2005得出的一些经验
- 从VC 6.0移植代码到VS C++ 2005得出的一些经验
- vc实现窗口全屏的一些方法
- 从VC 6.0移植代码到VS C++ 2005得出的一些经验
- vc实现窗口全屏的一些方法
- 用ROS来做无人测试平台系列之国外的一些RACECAR
- VC中的一些常用方法(20条)
- vc模拟键盘输入的一些资料
- 解决VC绘图时闪烁问题的一点经验
- Android面试系列文章2018之实战经验部分之异步框架篇