如何在桌面上顯示文字?


想不通過對話框而直接在屏幕顯示文字,來發布公司的通知
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 个解决方案

#1


HDC hDC = ::GetDC(NULL);

...顯示文字。

::ReleaseDC(NULL, hDC);

#2


樓上說的對

#3


  hwin=GetDesktopWindow();//獲取桌面窗口句柄
  dc=GetWindowDC(hwin);//獲取桌面窗口DC
  GetWindowRect(hwin,&rect);//獲取桌面窗口大小

#4


引用 1 樓 lwx300 的回復:
HDC hDC = ::GetDC(NULL); 

...顯示文字。 

::ReleaseDC(NULL, hDC); 


HDC 怎么顯示文字,應該不是用BitBlt

#5


引用 3 樓 levelmouse 的回復:
  hwin=GetDesktopWindow();//獲取桌面窗口句柄 
   dc=GetWindowDC(hwin);//獲取桌面窗口DC 
   GetWindowRect(hwin,&rect);//獲取桌面窗口大小

dc->DrawText

#6


引用 4 樓 scate 的回復:
引用 1 樓 lwx300 的回復:
HDC hDC = ::GetDC(NULL); 

...顯示文字。 

::ReleaseDC(NULL, hDC); 
 

HDC 怎么顯示文字,應該不是用BitBlt


HDC hDC = ::GetDC(NULL); 

//可以使用 TextOut(hDC....);   顯示文字。

::ReleaseDC(NULL, hDC); 

#7


引用 5 樓 zhangzii 的回復:
引用 3 樓 levelmouse 的回復:
  hwin=GetDesktopWindow();//獲取桌面窗口句柄 
  dc=GetWindowDC(hwin);//獲取桌面窗口DC 
  GetWindowRect(hwin,&rect);//獲取桌面窗口大小 
 
dc->DrawText

dc=GetWindowDC(hwin);//獲取桌面窗口DC 

dc->drawText
dc->textOut
都可以。
不過要實現復雜並且可控的窗口 最好是創建一個透明窗口。然后在這個窗口上畫文字。所謂的酷狗,QQ音樂什么什么歌詞顯示就是這樣一個窗口。你可以用spy++抓一下看看。
用一個API來實現 這個API好像是叫做 updatelayeredwindowattbr....哦 創建窗口的時候 還必須指定 EX_Layered屬性。就是0x80000那個屬性。
對話框可以在oninitidlg里面用setwindowlong給它加上這個屬性。
CSDN下載中心有這樣的例子。
祝你好運。

#8


標志

#9


引用 7 樓 glunoy 的回復:
引用 5 樓 zhangzii 的回復:
引用 3 樓 levelmouse 的回復: 
  hwin=GetDesktopWindow();//獲取桌面窗口句柄 
  dc=GetWindowDC(hwin);//獲取桌面窗口DC 
  GetWindowRect(hwin,&rect);//獲取桌面窗口大小 

dc->DrawText 
 
dc=GetWindowDC(hwin);//獲取桌面窗口DC 

dc->drawText 
dc->textOut 
都可以。 
不過要實現復雜並且可控的窗口 最好是創建一個透明窗口。然后在這個窗口上畫文字。所謂的酷狗,QQ音…


看來還是要使用透明窗口,如果直接用HDC畫在桌面上,使用內存來雙緩沖防閃動就比較難搞了,那個例子叫啥?

#10


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;
}

#11


http://download.csdn.net/source/940629 例子好像在這里。
不過作者封裝的稍微麻煩化了。其實不需要這么麻煩。你把功能函數摳出來就OK了。
祝你好運

#12


幫頂...

#13


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);
}

#14


老板娘的意思是能讓行政部出的通告以大號字體直接顯示在桌面的最前端,還要是滾動的,現在工作基本完成,但是使用大號字體就要使用大框體的對話框來承載,雖然弄成了透明,但發現放在最前端時用戶無法點擊到被透明的對話框隔開的圖標之類的東西,目前也只能這樣了,但如果以后公告比較長或者需要持續顯示的話,就要另想辦法了

#15


搞定了,現在就算不停滾動公告,鼠標也能點到圖標了

#16


透明窗口是可以點擊到下面的圖標或者窗口的。不會遮蓋。

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com