程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 簡單易懂的小應用StayOnTop,簡單易懂stayontop

簡單易懂的小應用StayOnTop,簡單易懂stayontop

編輯:C++入門知識

簡單易懂的小應用StayOnTop,簡單易懂stayontop



應用場景:
        當你需要邊聊天邊看網頁的時候, 你就不能把浏覽器最大化, 或者需要看一下網頁再去任務欄把聊天窗口點出來, 超麻煩不是?很多網頁兩邊都是空白的, 如果能讓聊天窗口置頂的話, 這個空間就得以利用了.但其實這又是個偽需求, 騰訊哪能沒想到?  每個窗口的右上角都有一個小按鈕, 隨時可以讓窗口置頂.

   

      但其他軟件就沒得玩了,  一邊看網上的Step-by-step教程, 一邊來回切換窗口真是麻煩死了, 當時就萌生了花一個晚上來寫它的想法.(其實這樣的工具應該一大把...另Linux下的話自帶置頂功能)
所以目標確定了, 我要做一個能讓任意窗口置頂的小工具.

知識點:
      窗口: Windows是以窗口作為主要交互界面的系統, 我們把那個能拖來拖去, 一般帶有最大化最小化關閉按鈕的大方框叫做窗口, 但是其實窗口的定義可以更廣泛一點, 一個按鈕是窗口, 一個文本框也是窗口.
      父窗口: 如果一個按鈕(Button)被放在一個Panel(面板)上,   那按鈕的父窗口就是Panel, 同樣Panel的父窗口是Form, Form就是我們平時說的窗口了;
      頂級窗口: Form的父窗口是什麼?  有人說是桌面(Desktop), 也有人說沒有父窗口, 但是通過實驗得知, 它沒有父窗口, 沒有父窗口的窗口我們叫做頂級窗口, 我們平時說的窗口, 都是指的頂級窗口;
      句柄: Handle, 這個"句柄"絕對是IT界的神翻譯, 誰知道句柄是個什麼意思?! 句柄是一種特殊的指針, 指向的是內存裡的對象,  通俗得講它就是一個窗口(事實上遠不止窗口)的把手, 你有了這個句柄就能開窗關窗, 改變窗口的狀態, 這樣的形容雖然不貼切, 但足夠生動了吧?
改變窗口的狀態?  對了, 只要我們獲得頂級窗口 的 句柄 ,改變它的狀態, 把"不置頂"改為"置頂", 就達成目的了.



梳理邏輯:

     自己做的工具不需要考慮太多, 而且要盡量簡單易用, 實現上述的功能只需要幾個API(Application Programmng Interface自行百度), 甚至連窗口都不需要, 所以決定用C語言.
流程如下: 1.獲得頂級窗口的句柄 , 2.改變它的狀態.
哪個窗口呢? 你需要指定一個窗口,    怎麼指定?
能想到最好的方案是用鼠標指定, 你鼠標放在哪一個窗口, 就是哪一個窗口;
有函數GetCursorPos(), 能夠取得鼠標所在的點;
又有函數WindowsFromPoint(),
取得在某點的窗口的句柄;
注意, 取得的是窗口的句柄, 要怎麼的得到頂級窗口的句柄呢? 不停地找這個窗口的父窗口, 直到某個窗口的父窗口的句柄為0(不存在), 那就找到了,
有函數GetParent(), 能取得窗口的父窗口.
取得頂級窗口的句柄後, 有函數SetWindowPos, 指定參數HWND, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_DRAWFRAME | SWP_NOSIZE 就能置頂一個窗口.
廢話了那麼多, 其實核心代碼只有6句,加了些修飾如下:

HWND GetHwnd()

{

    POINT p;

    HWND hwd;

    GetCursorPos(&p);

    hwd = WindowFromPoint(p);

    while (GetParent(hwd))

        hwd = GetParent(hwd);

    return hwd;

}
SetWindowPos(GetHwnd(),HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_DRAWFRAME | SWP_NOSIZE);


另, 以上函數都包含在Windows.h中, 創建沒有窗體的C語言工程, 可以新建Win32工程然後刪去所有代碼, 使用普通的Main函數即可.




完整代碼:

#include <windows.h>

#include <string.h>

HWND GetHwnd()

{

    POINT p;

    HWND hwd;

    GetCursorPos(&p);

    hwd = WindowFromPoint(p);

    while (GetParent(hwd))

        hwd = GetParent(hwd);

    return hwd;

}

int main(int argc, char* args[])

{

    if (argc < 2)

    {

        SetWindowPos(GetHwnd(),HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_DRAWFRAME | SWP_NOSIZE);

        return 0;

    }

    else

    {

        if (!strcmp("/?", args[1]))

        {

            MessageBox(0,

                "Availableparameters:\n/?\n/no param: stay on top.\nother param: cancel\n\n         2014.2.21 LastAvenger",

                "Help",

                MB_OK

                );

        }

        else

            SetWindowPos(GetHwnd(),HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_DRAWFRAME | SWP_NOSIZE);

    }

}

  


2道數學應用題:式子簡單易懂 並說明理由

1。 250/25=10
10+5=15
250*2/(10+15)=20km/h
2. 設甲班平均分x,乙x+7
51x+49(x+7)=81*(51+49)
x=77.57分
77.57+7=84.57分 一般
希望能幫到你
 

“多點觸摸”簡單來說是什?不要百度百科,用你的語言簡單易懂解釋一下

多點觸摸就是可以同時在屏幕上按兩個或者兩個以上的按鈕,放大縮小功能只是其中最簡單最常用的一個應用案例,主要的應用舉例:
在硬玻璃上彈琴成為現實。假如你的手機屏幕是多點觸摸的,就可以將其變成琴鍵,那麼哄哄小女孩還是很有趣的。另一個典型的例子是蘋果手機上的PS模擬器,通過多點觸摸技術,實現了同時進行方向鍵和其他按鈕的組合輸入。
 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved