關於Zoom In/Zoom Out |
尚未結案
|
tglee
一般會員 發表:10 回覆:18 積分:5 註冊:2004-10-11 發送簡訊給我 |
Dear 各位先進, 我們知道在Office 系列產品下Ctrl Wheel 前滾或後滾
可以使文件放大或縮小 可是我寫到程式時
卻不能放大或縮小,只能滾動捲軸,這是怎麼回事? 我的Code 如下:
前滾是120,後滾是-120,我只列出前滾
.
.
.
. HWND ahwnd = ::WindowFromPoint(pt);
keybd_event(VK_CONTROL,0,0,0);
::PostMessage(ahwnd,WM_MOUSEWHEEL,MAKEWPARAM(0,120),NULL);
keybd_event(VK_CONTROL,0,KEYEVENTF_KEYUP,0); 如果可以,請各位先進指教,謝謝
|
m8815010
版主 發表:99 回覆:372 積分:289 註冊:2003-11-13 發送簡訊給我 |
引言: Dear 各位先進, 我們知道在Office 系列產品下Ctrl Wheel 前滾或後滾 可以使文件放大或縮小 可是我寫到程式時 卻不能放大或縮小,只能滾動捲軸,這是怎麼回事? 我的Code 如下: 前滾是120,後滾是-120,我只列出前滾 . . . . HWND ahwnd = ::WindowFromPoint(pt); keybd_event(VK_CONTROL,0,0,0); ::PostMessage(ahwnd,WM_MOUSEWHEEL,MAKEWPARAM(0,120),NULL); keybd_event(VK_CONTROL,0,KEYEVENTF_KEYUP,0); 如果可以,請各位先進指教,謝謝tglee你好< >: 你這個問題有點奇怪吧< >!? Office的軟體可以按Ctrl wheel造成Zoom in、Zoom out的效果是沒錯!但那應是它自已軟體本身俱備的功能吧! 一般軟體應是沒有此功能的,所以雖然現在你模擬這樣的一個動作(ctrl wheel)去給一個視窗,但由於這個視窗並沒有這樣Zoom in 、Zoom out的能力,所以即使你做了,也是枉然!對吧?? 不知你覺得?! |
tglee
一般會員 發表:10 回覆:18 積分:5 註冊:2004-10-11 發送簡訊給我 |
|
m8815010
版主 發表:99 回覆:372 積分:289 註冊:2003-11-13 發送簡訊給我 |
引言: Dear m8815010, 沒錯阿,我有一個專案就是用滑鼠按鍵,一按下去就要能使Office 系列產品 Zoom In/Zoom Out. 不好意思,沒說明tglee你好: 嗯,瞭解你的意思了,我>>! 我測試了 class="code"> Word中: 前題:一個Word application有兩個HWND值是必要的,一個是整個視窗的HWND值,它的 classname是OpusApp,另一個視窗HWND值是我們編輯文件的那個編輯區視窗,它的 classname是_WwG 可達成Ctrl Wheel的方式: keybd_event(VK_CONTROL,0,0,0); SendMessage(hwnd,WM_MOUSEWHEEL,MAKEWPARAM(0,120),0); keybd_event(VK_CONTROL,0,KEYEVENTF_KEYUP,0); 說明:1.上述的hwnd值,可以是前題兩個hwnd值中的任一個 2.SendMessage可,PostMessage也可,但SendMessage效果較好 3.Ctrl鍵的按法,限定用keyboard event的這種方法 Excel中: 前題:同樣一個為整個視窗的HWND值,classname為XLMAIN,另一個可編輯區那個子視窗的 HWND值,classname為EXCEL7 可達成Ctrl Wheel的方式: SendMessage(hwnd,WM_MOUSEWHEEL,MAKEWPARAM(MK_CONTROL,120),0); 說明:1.上述的hwnd限用可編輯區的那個hwnd值 2.SendMessage,PostMessage皆可,效果一樣 3.3.Ctrl鍵的按法,限定用WParam內下MK_CONTROL參數的方式 Conclusion 1.各hwnd值的找法可自已寫程式,也可用VC的spy 直接測比較快 2.詭異的結果應該也是有合理的解釋,但似乎比try出結果難些! > >! 發表人 - |
tglee
一般會員 發表:10 回覆:18 積分:5 註冊:2004-10-11 發送簡訊給我 |
Dear m8815010, 謝謝您的回答,也寫的非常詳細
excel 沒問題(不好意思,我的Excel 做法與您相同,也謝謝您啦)
我提的問題是在Word,PowerPoint,Outlook 下
不過您使用的方式我之前也try 過了,還是不行,只有捲軸有動作-_-
我的作法如下:
.
.
.
.
HWND hWord = ::FindWindow("OpusApp",NULL);
HWND aHwnd = ::WindowFromPoint(pt);
HWND opHwnd = ::GetAncestor(aHwnd,GA_ROOTOWNER); if(hWord == opHwnd)
{
::keybd_event(VK_CONTROL,0,0,0);
::PostMessage(hWord,WM_MOUSEWHEEL,MAKEWPARAM(0,120),NULL);
::keybd_event(VK_CONTROL,0,KEYEVENTF_KEYUP,0);
} 而這樣是不行的:(,只有捲軸會動. 而我的環境是Office 2000,BCB 5.0,Windows 2000
如果您的方式與我不同,
請再指教一番,先謝謝您啦!!,您辛苦了!!
|
m8815010
版主 發表:99 回覆:372 積分:289 註冊:2003-11-13 發送簡訊給我 |
[quote]
Dear m8815010, 謝謝您的回答,也寫的非常詳細
excel 沒問題(不好意思,我的Excel 做法與您相同,也謝謝您啦)
我提的問題是在Word,PowerPoint,Outlook 下
不過您使用的方式我之前也try 過了,還是不行,只有捲軸有動作-_-
我的作法如下:
.
.
.
.
HWND hWord = ::FindWindow("OpusApp",NULL);
HWND aHwnd = ::WindowFromPoint(pt);
HWND opHwnd = ::GetAncestor(aHwnd,GA_ROOTOWNER); if(hWord == opHwnd)
{
::keybd_event(VK_CONTROL,0,0,0);
::PostMessage(hWord,WM_MOUSEWHEEL,MAKEWPARAM(0,120),NULL);
::keybd_event(VK_CONTROL,0,KEYEVENTF_KEYUP,0);
} 而這樣是不行的:(,只有捲軸會動. 而我的環境是Office 2000,BCB 5.0,Windows 2000
如果您的方式與我不同,
請再指教一番,先謝謝您啦!!,您辛苦了!! tglee你好: 剛剛又在我的 class="code">
~~
TForm1 *Form1; HWND hwnd; //---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
keybd_event(VK_CONTROL,0,0,0);
SendMessage(hwnd,WM_MOUSEWHEEL,MAKEWPARAM(0,-120),0);
keybd_event(VK_CONTROL,0,KEYEVENTF_KEYUP,0);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
hwnd=FindWindow("OpusApp",NULL); if (hwnd!=NULL)
this->Caption=(LONG)hwnd;
}
//---------------------------------------------------------------------------
這個範例中,Word視窗的hwnd值是直接用程式取的,不是用Spy 抓的!(當然你要先開一個Word Ap囉!) 承前篇回應由於Word的兩個視窗的Hwnd值皆可以使用,所以我就取整個Ap視窗的那個hwnd即可,也就是我上面範例的那一行,而tglee你的步驟卻那麼多:
HWND hWord = ::FindWindow("OpusApp",NULL);
HWND aHwnd = ::WindowFromPoint(pt);
HWND opHwnd = ::GetAncestor(aHwnd,GA_ROOTOWNER); if(hWord == opHwnd)
{ ...
...
... 我不確定你有沒有抓錯hwnd值哦! 另外控制 >! 最後,我不對其它的 >!
|
tglee
一般會員 發表:10 回覆:18 積分:5 註冊:2004-10-11 發送簡訊給我 |
|
m8815010
版主 發表:99 回覆:372 積分:289 註冊:2003-11-13 發送簡訊給我 |
|
tglee
一般會員 發表:10 回覆:18 積分:5 註冊:2004-10-11 發送簡訊給我 |
|
m8815010
版主 發表:99 回覆:372 積分:289 註冊:2003-11-13 發送簡訊給我 |
|
tglee
一般會員 發表:10 回覆:18 積分:5 註冊:2004-10-11 發送簡訊給我 |
Dear m8815010, MicroSoft 有一個Keyboard 叫Wireless Optical Comfort Keyboard 上有個拉
桿,他就是用Keyboard 上的拉桿去控制Office 系列的放大和縮小. 換句話說 ,我們的用意就是要用滑鼠上的按鍵去控制Office 產品的放大和縮小
這隻滑鼠可能是8 個鍵或10 個鍵,我們利用其中兩個鍵去控制放大和縮小
其他的按鍵去做mouse 的default function or programmable function. 您可以說他是噱頭,也可以稱他非常便利..
市面上有很多週邊輸入裝置有這功能 ^^ 如有問題,請指教^^
|
tglee
一般會員 發表:10 回覆:18 積分:5 註冊:2004-10-11 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |