文档打开时,正文上方显示文档信息的技术实现

Hydralisker 2018-11-17 04:22:52
如题,就像在文档的菜单下方悬挂了一条横幅,里面显示一些信息。
哪位高人指点一下,这个是用什么技术手段实现的?
效果图:

是在文档打开时给文档注入个DLL文件吗?然后在DLL文件里实现图片的描画?
...全文
39 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
「已注销」 2018-11-19
  • 打赏
  • 举报
回复
大体就是这样子的啦,至于文字颜色,关闭窗口,窗口变化大小等等,就是你自己窗口处理函数需要些的代码啦
「已注销」 2018-11-19
  • 打赏
  • 举报
回复
注入dll是对的,但是不是直接绘制,而是自己新建一个Notepad的子窗口,把编辑框Edit变成你的子窗口,你把这个窗口下设置SetWindowPos或者MoveWindow都可以
schlafenhamster 2018-11-18
  • 打赏
  • 举报
回复
参考:

// by creating process ***********************************
BOOL GoNotePad(char *path,BOOL bWait=TRUE)
{
char pathexe[MAX_PATH];
strcpy(pathexe,"notepad.exe ");
strcat(pathexe,path);//pathname="notepad.exe ",
STARTUPINFO sinfo;
PROCESS_INFORMATION pinfo;
memset (&sinfo,0,sizeof(STARTUPINFO));
sinfo.cb=sizeof(STARTUPINFO);
sinfo.dwFlags|=STARTF_USESHOWWINDOW;
sinfo.wShowWindow=SW_SHOWNORMAL;//SW_SHOW;// SW_SHOWDEFAULT;
//BOOL fsuccess=0;
BOOL fsuccess=CreateProcess(NULL,//lpApplicationName
pathexe, //lpCommanderLine
NULL, //lpProcessAttributes
NULL, //lpThreadAttributes
FALSE, //bInheritHandles
NORMAL_PRIORITY_CLASS,//dwCreationFlags
NULL, //lpEnvironment
NULL, //lpCurrentDirectory
&sinfo, //lpStartupInfo
&pinfo); //lpProcessInformation
// wait for NotePad finishes
if(fsuccess)
{
HANDLE hProcess=pinfo.hProcess;
CloseHandle(pinfo.hThread);// close thread at once
if (bWait)
{
if (WaitForSingleObject(hProcess,INFINITE)!=WAIT_FAILED)
{
DWORD dwExitCode;
GetExitCodeProcess(hProcess,&dwExitCode);
if (dwExitCode==STILL_ACTIVE) AfxMessageBox(IDS_NOTEPAD_ALIVE);
}
}
WaitForInputIdle(pinfo.hProcess,INFINITE);// let NotePad show window
CloseHandle(pinfo.hProcess);
}
return(fsuccess);
}
//
void CMdiInDlgDlg::OnAdd()
{
// TODO: Add your control notification handler code here
if(GoNotePad("",FALSE))
{//
m_hwnd=::FindWindow("NotePad","无标题 - 记事本");
if(m_hwnd)
{
LONG style=GetWindowLong(m_hwnd,GWL_STYLE);// 14CF 0000
// 1=WS_VISIBLE 4=WS_CLIPSIBLINGS C=WS_CAPTION;WS_THICKFRAME=4+WS_SYSMENU=8+WS_GROUP=2+WS_TABSTOP=1==F
style &=~WS_CAPTION;
style &=~WS_THICKFRAME;
style &=~WS_MINIMIZEBOX;
style &=~WS_MAXIMIZEBOX;
style &=~WS_SYSMENU;
style &=~WS_GROUP;
style &=~WS_TABSTOP;
// style |=WS_CHILD;// if used then no menu !!!
SetWindowLong(m_hwnd,GWL_STYLE,style);
CRect rc;
GetClientRect(rc);
rc.bottom-=50;// 底部 留 50 ,显示 文件信息 !
// afxDump << rc << "OK\n";
::SetParent(m_hwnd,this->m_hWnd);
::SetWindowPos(m_hwnd,HWND_TOP, rc.left, rc.top, rc.Width(), rc.Height(),SWP_FRAMECHANGED);
::SetFocus(m_hwnd);
SetCursorPos(10,10);// menu 'View'
}
}
}



Hydralisker 2018-11-18
  • 打赏
  • 举报
回复
引用 3 楼 schlafenhamster 的回复:
打开 notepad 调整 大小 放 窗口 上部,窗口 下部 显示 信息。

能说得详细一些吗?我明白您的思路:
1)把文字信息的显示区域往下调整图片高度的距离。
2)图片宽度设置为Notepad窗口的宽度,这样就不会有违和感。
我需要调用什么接口来实现上述1)2)的功能?谢谢先!
schlafenhamster 2018-11-17
  • 打赏
  • 举报
回复
打开 notepad 调整 大小 放 窗口 上部,窗口 下部 显示 信息。
Hydralisker 2018-11-17
  • 打赏
  • 举报
回复
引用 1 楼 smwhotjay 的回复:
修改ui 肯定要进入进程空间。注入 然后为所欲为


有道理!但是我注入后的效果变成这样了。

原文的一部分内容被覆盖了。。。难道要给Notepad.exe做二次开发,把文本内容显示的位置根据图片的高度往下挪吗?
smwhotjay 2018-11-17
  • 打赏
  • 举报
回复
修改ui 肯定要进入进程空间。注入 然后为所欲为

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧