📄 taskbar.c
字号:
#include <stdio.h>
#include <time.h>
#include <minigui/common.h>
#include <minigui/minigui.h>
#include <minigui/gdi.h>
#include <minigui/window.h>
#include <minigui/control.h>
#include <minigui/mgext.h>
#include "../common.h"
//Taskbar 控件ID
#define IDC_TASKBAR_INPUT 101
#define IDC_TASKBAR_CHANGE 102
//#define IDC_TASKBAR_CLOSE 103
//#define TRUE 1
//#define FALSE 0
static BOOL KBON; //键盘状态,监视键盘是否已经打开
//static hMainWnd; //MC-PDA的主窗口句柄
//static BITMAP bkgnd;
//static BITMAP key;
static HWND hCtrl1;
static HWND hCtrl2;
static void NotifChange (HWND hwnd, int id, int nc, DWORD add_data)
{
HWND TWnd;
//当鼠标单击该控件时
if (nc == STN_CLICKED)
{
if ((TWnd = GetNextMainWindow(MainWindow)) != 0)
{
//当主窗口后有窗口时,显示该窗口
ShowWindow(TWnd, SW_SHOWNORMAL);
}
else if ((TWnd = GetNextMainWindow (GetActiveWindow())) != MainWindow &&
TWnd != 0)
{
//当最上层窗口下有窗口,且此窗口不是主窗口时,显示该窗口
ShowWindow(TWnd, SW_SHOWNORMAL);
}
}
}
static void NotifInput (HWND hwnd, int id, int nc, DWORD add_data)
{
//鼠标点击该控件时
if (nc == STN_CLICKED)
{
if (KBON == TRUE)
{
//如果键盘没有打开,则显示键盘,同时将KBON状态设置为FALSE
KBON = FALSE;
KeyBoard (hwnd);
}
else
{
HWND Kb;
KBON = TRUE;
//如果键盘已经打开,则销毁键盘
Kb = GetFirstHosted(GetParent(hwnd));
DestroyAllControls (Kb);
DestroyMainWindow (Kb);
PostQuitMessage (Kb);
}
}
}
static int TaskBarPro (HWND hWnd, int message, WPARAM wParam, LPARAM lParam)
{
HDC hdc;
BOOL fGetDC;
RECT rcTemp;
const RECT* clip = (const RECT*) lParam;
switch (message) {
case MSG_CREATE:
//hdc = GetClientDC(GetDlgItem (hWnd, IDC_TASKBAR_CHANGE));
//创建“切换窗口”静态框
hCtrl2 = CreateWindowEx ("static", "切换窗口",
WS_VISIBLE | SS_NOTIFY | SS_LEFT,
WS_EX_TRANSPARENT,
IDC_TASKBAR_CHANGE,
5, 4, 50, 16,
hWnd,
0);
//建立“切换窗口”静态框回叫函数
//SetTextColor(GetClientDC(GetDlgItem (hWnd, IDC_TASKBAR_CHANGE)), PIXEL_red);
SetNotificationCallback (GetDlgItem (hWnd, IDC_TASKBAR_CHANGE), NotifChange);
//创建“输入法”静态框
hCtrl1 = CreateWindowEx ("static", "输入法",
WS_VISIBLE | SS_NOTIFY | SS_CENTER,
WS_EX_TRANSPARENT,
IDC_TASKBAR_INPUT,
265, 4, 50, 16,
hWnd,
0);
//建立“输入法”静态框回叫函数
SetNotificationCallback (GetDlgItem (hWnd, IDC_TASKBAR_INPUT), NotifInput);
break;
//case MSG_PAINT:
//hdc = GetClientDC(GetDlgItem (hWnd, IDC_TASKBAR_CHANGE));
//SetTextColor(GetClientDC(GetDlgItem (hWnd, IDC_TASKBAR_CHANGE)), PIXEL_red);
/*
case MSG_ERASEBKGND:
hdc = (HDC)wParam;
//const RECT* clip = (const RECT*) lParam;
fGetDC = FALSE;
//RECT rcTemp;
if (hdc == 0)
{
hdc = GetClientDC (hWnd);
fGetDC = TRUE;
}
if (clip)
{
rcTemp = *clip;
ScreenToClient (hWnd, &rcTemp.left, &rcTemp.top);
ScreenToClient (hWnd, &rcTemp.right, &rcTemp.bottom);
IncludeClipRect (hdc, &rcTemp);
}
FillBoxWithBitmap (hdc, 0, 0, 320, 206, &bkgnd);
// SetTextColor(GetClientDC(GetDlgItem (hWnd, IDC_TASKBAR_CHANGE)), PIXEL_red);
if (fGetDC)
ReleaseDC (hdc);
//printf ("EndERASE.\n");
return 0;
*/
case MSG_DESTROY:
DestroyAllControls (hWnd);
return 0;
case MSG_CLOSE:
//UnloadBitmap (&key);
//UnloadBitmap(&bkgnd);
DestroyMainWindow (hWnd);
PostQuitMessage (hWnd);
return 0;
}
return DefaultMainWinProc(hWnd, message, wParam, lParam);
}
/********************************************************************************************
* Function Name: TaskBar()
* Function Discription: create the TaskBar window
********************************************************************************************/
void *TaskBar(void *arg)
{
MSG Msg;
HWND hTaskBar;
MAINWINCREATE CreateInfo;
if(!InitMiniGUIExt())
{
exit(2);
}
KBON = TRUE;
//设置窗口属性
CreateInfo.dwStyle = WS_VISIBLE | WS_BORDER;
CreateInfo.dwExStyle = WS_EX_TOPMOST|WS_EX_TOOLWINDOW;
CreateInfo.spCaption = " ";
CreateInfo.hMenu = 0;
CreateInfo.hCursor = GetSystemCursor(0);
CreateInfo.hIcon = 0;
CreateInfo.MainWindowProc = TaskBarPro;
CreateInfo.lx = 0;
CreateInfo.ty = 214;
CreateInfo.rx = 320;
CreateInfo.by = 240;
CreateInfo.iBkColor = GetWindowElementColor (BKC_CONTROL_DEF);
CreateInfo.dwAddData = 0;
CreateInfo.dwReserved = 0;
CreateInfo.hHosting = HWND_DESKTOP;
//printf("%d!!!!!\n",MainWindow);
//LoadBitmap (HDC_SCREEN, &bkgnd, "./image/background/taskbar.jpg");//HDC_SCREEN:屏幕设备,加载图片必须在CreateMainWindow(&CreateInfo)之前
//创建TaskBar主窗口
hTaskBar = CreateMainWindow (&CreateInfo);
TaskBarWindow = hTaskBar;
if (hTaskBar == HWND_INVALID)
exit(-1);
//显示窗口
ShowWindow(hTaskBar, SW_SHOWNORMAL);
while (GetMessage(&Msg, hTaskBar))
{
TranslateMessage(&Msg);
DispatchMessage(&Msg);
}
MiniGUIExtCleanUp ();
MainWindowThreadCleanup (hTaskBar);
return NULL;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -