如何实现直接在屏幕上输出文字

时间:2023-02-10 22:29:22
注意啊,不是用mfc程序输出在程序上面,而是调用后直接显示在屏幕上,可以自定义文字大小,颜色,位置等,程序可以是一个mfc程序,也可以是一个控制台程序,调用后就直接在屏幕上画上了一段文字,过N秒后消失

16 个解决方案

#1


帮顶 顺便提示
HWND   hwnd;   
  hwnd=GetDesktopWindow();

#2


TextOut(x,y,...)

#3


void CMainFrame::OnScreenfont() 
{
// TODO: Add your command handler code here
// CDC * pDC = CWnd::GetDesktopWindow()->GetDC();
// pDC ->TextOut(0 ,0, "font");
CWindowDC dc(NULL);

CFont myFont;
myFont.CreateFont ( 
  120,                        // nHeight 字体高度
  40,                         // nWidth  字体宽度
  0,                         // nEscapement 显示角度
  0,                         // nOrientation 字体角度
  FW_NORMAL,                 // nWeight 字体磅值
  FALSE,                     // bItalic 是否倾斜
  FALSE,                     // bUnderline 是否斜体
  0,                         // cStrikeOut 是否加删除线
  ANSI_CHARSET,              // nCharSet 指定字符集
  OUT_DEFAULT_PRECIS,        // nOutPrecision 指定输出精度
  CLIP_DEFAULT_PRECIS,       // nClipPrecision 指定剪切精度
  DEFAULT_QUALITY,           // nQuality 指定输出质量
  DEFAULT_PITCH | FF_SWISS,  // nPitchAndFamily 字符族
  "Arial");                  // 指定字体的字样名

CFont* oldFont = dc.SelectObject ( &myFont);
dc.SetTextColor (RGB (255,0,0));

dc.SetBkMode ( TRANSPARENT);     //背景模式为透明

    dc.TextOut(200,200,"屏幕上显示文字");

dc.SelectObject ( oldFont);
}

#4


这是我前不久看到的,不知道是不是你要的.

#5


需要不少内容 你不会

#6


其实做一个背景透明的窗口比较简单

#7


你所谓的显示文字,也是要有载体的,WINDOWS上你最好依靠WINDOW去显示,窗体透明而已,除非你直接读写显存,有些游戏有这种情况。

#8


引用 6 楼 magic7004 的回复:
其实做一个背景透明的窗口比较简单

顶!

#9


引用 7 楼 wizardk 的回复:
你所谓的显示文字,也是要有载体的,WINDOWS上你最好依靠WINDOW去显示,窗体透明而已,除非你直接读写显存,有些游戏有这种情况。

这个也顶哈

#10


其实CWindowDC,可以获取窗口设备环境,然后调用函数就可以输出了!不知道是不是你要的!

#11


引用 3 楼 wan8520 的回复:
void CMainFrame::OnScreenfont()
{
// TODO: Add your command handler code here
// CDC * pDC = CWnd::GetDesktopWindow()->GetDC();
// pDC ->TextOut(0 ,0, "font");
CWindowDC dc(NULL);

CFont myFont;
myFont.CreateFont (
  120,                        // nHeight 字体高度
  40,                        // nWidth  字体宽度
  0,                        // nEscapement 显示角度
  0,                        // nOrientation 字体角度
  FW_NORMAL,                // nWeight 字体磅值
  FALSE,                    // bItalic 是否倾斜
  FALSE,                    // bUnderline 是否斜体
  0,                        // cStrikeOut 是否加删除线
  ANSI_CHARSET,              // nCharSet 指定字符集
  OUT_DEFAULT_PRECIS,        // nOutPrecision 指定输出精度
  CLIP_DEFAULT_PRECIS,      // nClipPrecision 指定剪切精度
  DEFAULT_QUALITY,          // nQuality 指定输出质量
  DEFAULT_PITCH | FF_SWISS,  // nPitchAndFamily 字符族
  "Arial");                  // 指定字体的字样名

CFont* oldFont = dc.SelectObject ( &myFont);
dc.SetTextColor (RGB (255,0,0));

dc.SetBkMode ( TRANSPARENT);    //背景模式为透明

    dc.TextOut(200,200,"屏幕上显示文字");

dc.SelectObject ( oldFont);
}

这个好像不是吧!楼主
msdn结束The GetDesktopWindow function returns a handle to the desktop window. The desktop window covers the entire screen. The desktop window is the area on top of which other windows are painted. 

#12


引用 3 楼 wan8520 的回复:
void CMainFrame::OnScreenfont()
{
// TODO: Add your command handler code here
// CDC * pDC = CWnd::GetDesktopWindow()->GetDC();
// pDC ->TextOut(0 ,0, "font");
CWindowDC dc(NULL);

CFont myFont;
myFont.CreateFont (
  120,                        // nHeight 字体高度
  40,                        // nWidth  字体宽度
  0,                        // nEscapement 显示角度
  0,                        // nOrientation 字体角度
  FW_NORMAL,                // nWeight 字体磅值
  FALSE,                    // bItalic 是否倾斜
  FALSE,                    // bUnderline 是否斜体
  0,                        // cStrikeOut 是否加删除线
  ANSI_CHARSET,              // nCharSet 指定字符集
  OUT_DEFAULT_PRECIS,        // nOutPrecision 指定输出精度
  CLIP_DEFAULT_PRECIS,      // nClipPrecision 指定剪切精度
  DEFAULT_QUALITY,          // nQuality 指定输出质量
  DEFAULT_PITCH | FF_SWISS,  // nPitchAndFamily 字符族
  "Arial");                  // 指定字体的字样名

CFont* oldFont = dc.SelectObject ( &myFont);
dc.SetTextColor (RGB (255,0,0));

dc.SetBkMode ( TRANSPARENT);    //背景模式为透明

    dc.TextOut(200,200,"屏幕上显示文字");

dc.SelectObject ( oldFont);
}

不知道OnScreenfont()是什么函数?是自定义的函数?还是通过添加消息自动生成的啊?
学习下

#13


引用楼主 sksgod 的回复:
注意啊,不是用mfc程序输出在程序上面,而是调用后直接显示在屏幕上,可以自定义文字大小,颜色,位置等,程序可以是一个mfc程序,也可以是一个控制台程序,调用后就直接在屏幕上画上了一段文字,过N秒后消失


才认真看,楼主想写音乐播放器软件呀,用透明窗口实现更好

#14


3楼这种答案太聪明了,复制下来就直接用了

#15


void CScreenFontView::OnScreenfont() 
{
CDlg dlg;
dlg.DoModal();
CString str;
int x,y;
UpdateData();
str=dlg.m_edit;
        x=dlg.m_x;
y=dlg.m_y;

CWindowDC dc(NULL);
CFont myFont;
myFont.CreateFont(
160,
40,
0,
0,
FW_NORMAL,
true,
false,
0,
ANSI_CHARSET,
OUT_DEFAULT_PRECIS,
CLIP_DEFAULT_PRECIS,
DEFAULT_QUALITY,
DEFAULT_PITCH|FF_SWISS,
"Arial");
CFont *oldFont=dc.SelectObject(&myFont);
dc.SetTextColor(RGB(255,0,0));
dc.SetBkMode(TRANSPARENT);
dc.TextOut(x,y,str);
dc.SelectObject(oldFont);
UpdateData(FALSE);

}
CDlg 是与新建的一个对话框相关联的类,里面m_edit,m_x,m_y,是与对话框内三个编辑框控件相关联的变量,onscreenfont 是一个菜单的映射函数。这个可以实现点击菜单,弹出对话框,输入要显示的文字和位置,不过屏幕刷新一下文字就会消失

#16


该回复于2012-07-03 16:19:33被版主删除

#1


帮顶 顺便提示
HWND   hwnd;   
  hwnd=GetDesktopWindow();

#2


TextOut(x,y,...)

#3


void CMainFrame::OnScreenfont() 
{
// TODO: Add your command handler code here
// CDC * pDC = CWnd::GetDesktopWindow()->GetDC();
// pDC ->TextOut(0 ,0, "font");
CWindowDC dc(NULL);

CFont myFont;
myFont.CreateFont ( 
  120,                        // nHeight 字体高度
  40,                         // nWidth  字体宽度
  0,                         // nEscapement 显示角度
  0,                         // nOrientation 字体角度
  FW_NORMAL,                 // nWeight 字体磅值
  FALSE,                     // bItalic 是否倾斜
  FALSE,                     // bUnderline 是否斜体
  0,                         // cStrikeOut 是否加删除线
  ANSI_CHARSET,              // nCharSet 指定字符集
  OUT_DEFAULT_PRECIS,        // nOutPrecision 指定输出精度
  CLIP_DEFAULT_PRECIS,       // nClipPrecision 指定剪切精度
  DEFAULT_QUALITY,           // nQuality 指定输出质量
  DEFAULT_PITCH | FF_SWISS,  // nPitchAndFamily 字符族
  "Arial");                  // 指定字体的字样名

CFont* oldFont = dc.SelectObject ( &myFont);
dc.SetTextColor (RGB (255,0,0));

dc.SetBkMode ( TRANSPARENT);     //背景模式为透明

    dc.TextOut(200,200,"屏幕上显示文字");

dc.SelectObject ( oldFont);
}

#4


这是我前不久看到的,不知道是不是你要的.

#5


需要不少内容 你不会

#6


其实做一个背景透明的窗口比较简单

#7


你所谓的显示文字,也是要有载体的,WINDOWS上你最好依靠WINDOW去显示,窗体透明而已,除非你直接读写显存,有些游戏有这种情况。

#8


引用 6 楼 magic7004 的回复:
其实做一个背景透明的窗口比较简单

顶!

#9


引用 7 楼 wizardk 的回复:
你所谓的显示文字,也是要有载体的,WINDOWS上你最好依靠WINDOW去显示,窗体透明而已,除非你直接读写显存,有些游戏有这种情况。

这个也顶哈

#10


其实CWindowDC,可以获取窗口设备环境,然后调用函数就可以输出了!不知道是不是你要的!

#11


引用 3 楼 wan8520 的回复:
void CMainFrame::OnScreenfont()
{
// TODO: Add your command handler code here
// CDC * pDC = CWnd::GetDesktopWindow()->GetDC();
// pDC ->TextOut(0 ,0, "font");
CWindowDC dc(NULL);

CFont myFont;
myFont.CreateFont (
  120,                        // nHeight 字体高度
  40,                        // nWidth  字体宽度
  0,                        // nEscapement 显示角度
  0,                        // nOrientation 字体角度
  FW_NORMAL,                // nWeight 字体磅值
  FALSE,                    // bItalic 是否倾斜
  FALSE,                    // bUnderline 是否斜体
  0,                        // cStrikeOut 是否加删除线
  ANSI_CHARSET,              // nCharSet 指定字符集
  OUT_DEFAULT_PRECIS,        // nOutPrecision 指定输出精度
  CLIP_DEFAULT_PRECIS,      // nClipPrecision 指定剪切精度
  DEFAULT_QUALITY,          // nQuality 指定输出质量
  DEFAULT_PITCH | FF_SWISS,  // nPitchAndFamily 字符族
  "Arial");                  // 指定字体的字样名

CFont* oldFont = dc.SelectObject ( &myFont);
dc.SetTextColor (RGB (255,0,0));

dc.SetBkMode ( TRANSPARENT);    //背景模式为透明

    dc.TextOut(200,200,"屏幕上显示文字");

dc.SelectObject ( oldFont);
}

这个好像不是吧!楼主
msdn结束The GetDesktopWindow function returns a handle to the desktop window. The desktop window covers the entire screen. The desktop window is the area on top of which other windows are painted. 

#12


引用 3 楼 wan8520 的回复:
void CMainFrame::OnScreenfont()
{
// TODO: Add your command handler code here
// CDC * pDC = CWnd::GetDesktopWindow()->GetDC();
// pDC ->TextOut(0 ,0, "font");
CWindowDC dc(NULL);

CFont myFont;
myFont.CreateFont (
  120,                        // nHeight 字体高度
  40,                        // nWidth  字体宽度
  0,                        // nEscapement 显示角度
  0,                        // nOrientation 字体角度
  FW_NORMAL,                // nWeight 字体磅值
  FALSE,                    // bItalic 是否倾斜
  FALSE,                    // bUnderline 是否斜体
  0,                        // cStrikeOut 是否加删除线
  ANSI_CHARSET,              // nCharSet 指定字符集
  OUT_DEFAULT_PRECIS,        // nOutPrecision 指定输出精度
  CLIP_DEFAULT_PRECIS,      // nClipPrecision 指定剪切精度
  DEFAULT_QUALITY,          // nQuality 指定输出质量
  DEFAULT_PITCH | FF_SWISS,  // nPitchAndFamily 字符族
  "Arial");                  // 指定字体的字样名

CFont* oldFont = dc.SelectObject ( &myFont);
dc.SetTextColor (RGB (255,0,0));

dc.SetBkMode ( TRANSPARENT);    //背景模式为透明

    dc.TextOut(200,200,"屏幕上显示文字");

dc.SelectObject ( oldFont);
}

不知道OnScreenfont()是什么函数?是自定义的函数?还是通过添加消息自动生成的啊?
学习下

#13


引用楼主 sksgod 的回复:
注意啊,不是用mfc程序输出在程序上面,而是调用后直接显示在屏幕上,可以自定义文字大小,颜色,位置等,程序可以是一个mfc程序,也可以是一个控制台程序,调用后就直接在屏幕上画上了一段文字,过N秒后消失


才认真看,楼主想写音乐播放器软件呀,用透明窗口实现更好

#14


3楼这种答案太聪明了,复制下来就直接用了

#15


void CScreenFontView::OnScreenfont() 
{
CDlg dlg;
dlg.DoModal();
CString str;
int x,y;
UpdateData();
str=dlg.m_edit;
        x=dlg.m_x;
y=dlg.m_y;

CWindowDC dc(NULL);
CFont myFont;
myFont.CreateFont(
160,
40,
0,
0,
FW_NORMAL,
true,
false,
0,
ANSI_CHARSET,
OUT_DEFAULT_PRECIS,
CLIP_DEFAULT_PRECIS,
DEFAULT_QUALITY,
DEFAULT_PITCH|FF_SWISS,
"Arial");
CFont *oldFont=dc.SelectObject(&myFont);
dc.SetTextColor(RGB(255,0,0));
dc.SetBkMode(TRANSPARENT);
dc.TextOut(x,y,str);
dc.SelectObject(oldFont);
UpdateData(FALSE);

}
CDlg 是与新建的一个对话框相关联的类,里面m_edit,m_x,m_y,是与对话框内三个编辑框控件相关联的变量,onscreenfont 是一个菜单的映射函数。这个可以实现点击菜单,弹出对话框,输入要显示的文字和位置,不过屏幕刷新一下文字就会消失

#16


该回复于2012-07-03 16:19:33被版主删除