如題,就像在檔案的選單下方懸掛了一條橫幅,里面顯示一些資訊。
哪位高人指點一下,這個是用什么技術手段實作的?
效果圖:

是在檔案打開時給檔案注入個DLL檔案嗎?然后在DLL檔案里實作圖片的描畫?
uj5u.com熱心網友回復:
修改ui 肯定要進入行程空間。注入 然后為所欲為uj5u.com熱心網友回復:
有道理!但是我注入后的效果變成這樣了。

原文的一部分內容被覆寫了。。。難道要給Notepad.exe做二次開發,把文本內容顯示的位置根據圖片的高度往下挪嗎?
uj5u.com熱心網友回復:
打開 notepad 調整 大小 放 視窗 上部,視窗 下部 顯示 資訊。uj5u.com熱心網友回復:
能說得詳細一些嗎?我明白您的思路:
1)把文字資訊的顯示區域往下調整圖片高度的距離。
2)圖片寬度設定為Notepad視窗的寬度,這樣就不會有違和感。
我需要呼叫什么介面來實作上述1)2)的功能?謝謝先!
uj5u.com熱心網友回復:
參考:
// 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'
}
}
}

uj5u.com熱心網友回復:
注入dll是對的,但是不是直接繪制,而是自己新建一個Notepad的子視窗,把編輯框Edit變成你的子視窗,你把這個視窗下設定SetWindowPos或者MoveWindow都可以uj5u.com熱心網友回復:
大體就是這樣子的啦,至于文字顏色,關閉視窗,視窗變化大小等等,就是你自己視窗處理函式需要些的代碼啦
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/59523.html
標籤:界面
