想不通過對話框而直接在屏幕顯示文字,來發布公司的通知
CRect rect;
CDC *pDc;
CDC mDc;
pDc = GetDC();
........//在mDc里寫了些字
rect.SetRect(200,600,1000,800);
pDc->BitBlt(rect.left,rect.top,rect.right,rect.bottom,&mDC,0,0,SRCCOPY);
結果什么都沒有
但是把前面換成
GetClientRect(&rect);
pDc = this->GetDC();
則可以看到有字飄過
16 个解决方案
HDC hDC = ::GetDC(NULL);
...顯示文字。
::ReleaseDC(NULL, hDC);
hwin=GetDesktopWindow();//獲取桌面窗口句柄
dc=GetWindowDC(hwin);//獲取桌面窗口DC
GetWindowRect(hwin,&rect);//獲取桌面窗口大小
OnInitDialog:
ModifyStyleEx(0, WS_EX_LAYERED);
SetLayeredWindowAttributes(RGB(1,2,3), 0, LWA_COLORKEY);
BOOL CerereDlg::OnEraseBkgnd(CDC* pDC)
{
RECT rc;
GetClientRect(&rc);
pDC->FillSolidRect(&rc, RGB(1,2,3));
return TRUE;
}
http://download.csdn.net/source/940629 例子好像在這里。
不過作者封裝的稍微麻煩化了。其實不需要這么麻煩。你把功能函數摳出來就OK了。
祝你好運
int i = 0 ;
while( i < 600)
{
RECT rc;
TCHAR szText[] = _T("Hello,World!");
HWND hWndDT = GetDesktopWindow();
HDC hdc = GetWindowDC(hWndDT);
SetBkMode(hdc,TRANSPARENT);
GetWindowRect(hWndDT,&rc);
int iX = rc.right/2 ;
int iY = rc.bottom/2 ;
TextOut(hdc , iX, iY ,szText , _tcslen(szText));
ReleaseDC(hWndDT,hdc);
i++;
Sleep(100);
}
老板娘的意思是能讓行政部出的通告以大號字體直接顯示在桌面的最前端,還要是滾動的,現在工作基本完成,但是使用大號字體就要使用大框體的對話框來承載,雖然弄成了透明,但發現放在最前端時用戶無法點擊到被透明的對話框隔開的圖標之類的東西,目前也只能這樣了,但如果以后公告比較長或者需要持續顯示的話,就要另想辦法了
透明窗口是可以點擊到下面的圖標或者窗口的。不會遮蓋。