2018年4月29日 星期日

不爽 0002

總: 董事長剛吃完飯,等等讓他吃藥
我: 好(看了一下桌面),只有一個杯子?
總: 對,你到底有沒有在顧(用心)?飯後都只有一杯藥
我: 有啊(心想早上明明看到2個杯子的藥,還是我看錯了?)
(之後)
總: 你...
我: 嗯(不想回答有意義的文字了)


(中午,問了一下護理師)
我: 請問早上餐後的藥是一杯還兩杯?
護: 兩杯呵,一杯裡面三顆藥,一杯喝的
我: 謝謝。(心想,掯!早上總經理是在唸不爽的嗎?到底是誰沒在顧?)

不爽 0001

早上總經理帶來早餐(一袋兩個餐+另一袋一杯飲料)
總: 看你要吃什麼餐
我: 隨手拿了一個吃完後
總: 有飲料
我: 打開一看只有一杯,你喝什麼?
總: 你喝
(我拿出來時不小心打翻飲料,桌上地上都有)
總: 龜龜毛毛(一手拿早餐,一手拿在處理飲料)
我: 我自己處理
總: 不用,代誌都不會做
(我待了幾秒後,就不爽的離開)
(過一會兒,總經理來電,我不想接,直接回來)
總: 突然跑去哪裡?
我: (沒回應,因為不爽,心想有必要這樣罵人嗎?)

2018年4月3日 星期二

Windows Form 將 FormBorderStyle 設為 none 時,視窗的拖曳方式

因為專案畫面上的需求(Form 表頭的顏色與設計),
所以將 Windows Form 的 FormBorderStyle 設定 none 後,再自行加上 TableLayoutPanel (tableLayoutPanel1) 等控制項來偽裝

此時如果遇上使用者使用的電腦解析度,低於設計時,會造成畫面被切掉,此時因為 FormBorderStyle 設為 none,所以 Form 也拉不動,所以需要再對於拖曳功能加工(沒事找事做)
對於 Form 內的控制項可以單純的在 MouseDown(按下滑鼠)、DragEnter(拖曳開始)、DragDrop(拖曳結束) 事件中寫下相對應的語法,可參考 在 Windows Form 中執行拖放作業

但現在是在 Windows Form 外執行拖放作業,可以用win32 的角度來撰寫語法
// win32 的角度來撰寫語法
public const int WM_NCLBUTTONDOWN = 0xA1;
public const int HT_CAPTION = 0x2;

[System.Runtime.InteropServices.DllImportAttribute("user32.dll")]
public static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam);
[System.Runtime.InteropServices.DllImportAttribute("user32.dll")]
public static extern bool ReleaseCapture();

// 再在 tableLayoutPanel1 的 MouseDown 事件寫下
private void tableLayoutPanel1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
{     
    if (e.Button == MouseButtons.Left)
    {
        ReleaseCapture();
        SendMessage(Handle, WM_NCLBUTTONDOWN, HT_CAPTION, 0);
    }
}
或是在 tableLayoutPanel1 的 MouseDown、MouseMove 事件撰寫語法
// 在 tableLayoutPanel1 的 MouseDown、MouseMove 事件撰寫語法
private Point startPoint;   // 紀錄目前視窗的位置
private void tableLayoutPanel1_MouseDown(object sender, MouseEventArgs e)
{
    //當滑鼠擊以左點擊控制項的範圍內時,透過計算紀錄目前視窗的位置
    if (e.Button == MouseButtons.Left)
    {
        startPoint = new Point(-e.X + SystemInformation.FrameBorderSize.Width, -e.Y - SystemInformation.FrameBorderSize.Height);
    }
}

private void tableLayoutPanel1_MouseMove(object sender, MouseEventArgs e)
{
    // 當滑鼠擊按著左鍵移動時,記錄下移動的位置
    if (e.Button == MouseButtons.Left)
    {
        // 滑鼠指標的位置
        Point mousePos = Control.MousePosition;
        // 新視窗的位置(等於滑鼠指標目前的位置與先前視窗位置的位移)
        mousePos.Offset(startPoint.X, startPoint.Y);
        // 改變視窗位置
        Location = mousePos;
    }
}