15,979
社区成员
发帖
与我相关
我的任务
分享
#include "framework.h"
#include "FrameworkUI.h"
#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='x86' publicKeyToken='6595b64144ccf1df' language='*'\"")
#define IDC_2 1002
#define IDC_3 2002
#define IDC_CLOSE 233
#define IDC_MINIMIZE 2233
HINSTANCE g_hInstance;
LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
LRESULT CALLBACK BtnProc2(HWND, UINT, WPARAM, LPARAM);//按钮2窗口过程
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
// TODO: Place code here.
g_hInstance = hInstance;
TCHAR className[] = TEXT("my class");
TCHAR szBtnName2[] = TEXT("MyBtn2");
WNDCLASS wndclass = { 0 };
wndclass.hInstance = hInstance;
wndclass.hbrBackground = (CreateSolidBrush(RGB(30,30,30)));
wndclass.lpszClassName = className;
wndclass.lpfnWndProc = WindowProc;
wndclass.hIcon = LoadIcon(NULL,MAKEINTRESOURCE(IDI_SMALL));
RegisterClass(&wndclass);
HWND hMain = CreateWindow(className, "FrameworkUI", WS_OVERLAPPEDWINDOW, 300, 300, 400, 300, NULL, NULL, hInstance, NULL);
if (!hMain)
{
OutputDebugString("=),");
return 0;
}
ShowWindow(hMain, SW_SHOW);
WNDCLASS wndbtn2 = { 0 };
wndbtn2.cbClsExtra = 0;
wndbtn2.cbWndExtra = 0;
wndbtn2.hbrBackground = CreateSolidBrush(RGB(104, 104, 104));
wndbtn2.hCursor = NULL;
wndbtn2.hIcon = NULL;
wndbtn2.hInstance = hInstance;
wndbtn2.lpfnWndProc = BtnProc2;
wndbtn2.lpszClassName = szBtnName2;
wndbtn2.lpszMenuName = NULL;
wndbtn2.style = CS_HREDRAW | CS_VREDRAW;
if (!RegisterClass(&wndbtn2))
{
MessageBox(NULL, TEXT("RegisterClass wndbtn failed"), TEXT("ERROR"), 0);
return 0;
}
HWND hButton2 = CreateWindow(szBtnName2, TEXT("MyButton2"),
WS_CHILD | WS_VISIBLE, 0, 0, 0, 0, hMain, NULL, hInstance, 0);
ShowWindow(hButton2, SW_SHOW);
UpdateWindow(hButton2);
MSG msg;
BOOL ret;
while (ret = GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return 0;
}
//主窗口过程 PROC
LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
static HFONT hFont;//定义静态字体变量
static HWND close;
static HWND MINIMIZE;
static HWND txt1;
static HWND txt2;
static HWND bt1;
char txt[40];
HDC hdc;
HDC hdcMem;
PAINTSTRUCT ps;
HINSTANCE hInstance;
BITMAP bitmap;
static HBITMAP hBitmap; // 1 静态变量
static int bmWidth, bmHeight; // 2 静态变量
switch (uMsg)
{
case WM_CREATE:
{
hInstance = ((LPCREATESTRUCT)lParam)->hInstance; // 3
hBitmap = LoadBitmap(hInstance, MAKEINTRESOURCE(IDB_BITMAP1)); // 4
GetObject(hBitmap, sizeof(BITMAP), &bitmap); // 5
bmWidth = bitmap.bmWidth; // 6
bmHeight = bitmap.bmHeight;
hFont = CreateFont(14, 7, 0, 0, 0, FALSE, FALSE, 0, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_SWISS, "Minecraft");//创建字体
txt1 = CreateWindow("STATIC", "FrameworkUI", WS_CHILD | WS_VISIBLE | SS_NOTIFY, 10, 10, 120, 20, hwnd, (HMENU)IDC_2, g_hInstance, NULL);//创建静态文本
SendMessage(txt1, WM_SETFONT, (WPARAM)hFont, TRUE);//发送设置字体消息
break;
}
case WM_PAINT:
hdc = BeginPaint(hwnd, &ps); // 8
hdcMem = CreateCompatibleDC(hdc); // 9
SelectObject(hdcMem, hBitmap); // 10
BitBlt(hdc, 375, 5, bmWidth, bmHeight, hdcMem, 0, 0, SRCCOPY); // 11 显示位图
DeleteDC(hdcMem); // 12
EndPaint(hwnd, &ps); // 13
break;
case WM_CTLCOLORSTATIC://拦截WM_CTLCOLORSTATIC消息
{
if ((HWND)lParam == GetDlgItem(hwnd, IDC_2))//2
{
SetTextColor((HDC)wParam, RGB(165, 120, 120));
SetBkMode((HDC)wParam, TRANSPARENT);
}
if ((HWND)lParam == GetDlgItem(hwnd, IDC_CLOSE))//2
{
SetTextColor((HDC)wParam, RGB(199, 0, 0));
SetBkMode((HDC)wParam, TRANSPARENT);
}
if ((HWND)lParam == GetDlgItem(hwnd, IDC_MINIMIZE))//2
{
SetTextColor((HDC)wParam, RGB(199, 0, 0));
SetBkMode((HDC)wParam, TRANSPARENT);
}
return (INT_PTR)GetStockObject((NULL_BRUSH));//返回一个空画刷(必须)
}
case WM_SIZE:
{
LONG_PTR Style = ::GetWindowLongPtr(hwnd, GWL_STYLE);
Style = Style & ~WS_CAPTION & ~WS_SYSMENU & ~WS_SIZEBOX;
::SetWindowLongPtr(hwnd, GWL_STYLE, Style);
break;
}
case WM_LBUTTONDOWN:
{
SendMessage(hwnd, WM_NCLBUTTONDOWN, HTCAPTION, 0); //向窗口发送WM_NCLBUTTONDOWN消息,HTCAPTION 标题
break;
}
case WM_COMMAND:
{
switch (LOWORD(wParam))
{
case IDC_2:
MessageBox(hwnd, "标题栏的消息响应(这明明是静态文本)xD", "提示", MB_OK | MB_ICONINFORMATION);
break;
case IDC_3:
MessageBox(hwnd, "您点击了按钮。(我需要告诉你你做了什么)", "提示", MB_OK | MB_ICONINFORMATION);
break;
case IDB_BITMAP1:
{
case WM_DESTROY:
{
DeleteObject(hBitmap); // 14
DeleteObject(hFont);//删除所创建字体对象
PostQuitMessage(0);
break;
}
}
case IDC_MINIMIZE:
{
SendMessage(hwnd, WM_SYSCOMMAND, SC_MINIMIZE, 0); // 最小化
break;
}
break;
}
break;
}
}
return DefWindowProc(hwnd, uMsg, wParam, lParam);
}
//子窗口过程
LRESULT CALLBACK BtnProc2(HWND hBtn2, UINT message, WPARAM wParam, LPARAM lParam)
{
PAINTSTRUCT ps = { 0 };
HDC DC = NULL;
switch (message)
{
case WM_CREATE:
{
MoveWindow(hBtn2, 30, 50, 250, 100, TRUE);
//画椭圆区域,还可以画圆角,多边形等等
HRGN hRgn = CreateRoundRectRgn(10, 10, 600, 50, 0, 10);
SetWindowRgn(hBtn2, hRgn, TRUE);
}
break;
case WM_LBUTTONDOWN:
MessageBox(NULL, TEXT("MyButton2"), TEXT("提示"), 0);
break;
case WM_PAINT:
{
DC = BeginPaint(hBtn2, &ps);
SetBkColor(DC, RGB(104, 104, 104)); //按钮背景颜色
SetTextColor(DC, RGB(210, 210, 210)); //按钮上的文字颜色
TextOut(DC, 20, 19, _T("BUTTON"), 10); //按钮上的文字
EndPaint(hBtn2, &ps);
}
break;
default:
break;
}
return DefWindowProc(hBtn2, message, wParam, lParam);
}
LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
static HFONT hFont;//定义静态字体变量
static HWND close;
static HWND MINIMIZE;
static HWND txt1;
static HWND txt2;
static HWND bt1;
static int msLast=WM_MOUSELEAVE;
char txt[40];
HDC hdc =NULL;
HDC hdc2 = NULL;
HDC hdcMem;
PAINTSTRUCT ps;
HINSTANCE hInstance = NULL;
BITMAP bitmap;
static HBITMAP hBitmap; // 1 静态变量
static HBITMAP hBitmap2;
static int bmWidth, bmHeight; // 2 静态变量
switch (uMsg)
{
case WM_CREATE:
{
hInstance = ((LPCREATESTRUCT)lParam)->hInstance; // 3
hBitmap = LoadBitmap(hInstance, MAKEINTRESOURCE(IDB_BITMAP1)); // 4
GetObject(hBitmap, sizeof(BITMAP), &bitmap); // 5
bmWidth = bitmap.bmWidth; // 6
bmHeight = bitmap.bmHeight;
//222222
hInstance = ((LPCREATESTRUCT)lParam)->hInstance; // 3
hBitmap2 = LoadBitmap(hInstance, MAKEINTRESOURCE(IDB_BITMAP2)); // 4
GetObject(hBitmap, sizeof(BITMAP), &bitmap); // 5
bmWidth = bitmap.bmWidth; // 6
bmHeight = bitmap.bmHeight;
//222222
hInstance = ((LPCREATESTRUCT)lParam)->hInstance; // 3
hBitmap2 = LoadBitmap(hInstance, MAKEINTRESOURCE(IDB_BITMAP2)); // 4
GetObject(hBitmap, sizeof(BITMAP), &bitmap); // 5
bmWidth = bitmap.bmWidth; // 6
bmHeight = bitmap.bmHeight;
//DRAW ^
hFont = CreateFont(14, 7, 0, 0, 0, FALSE, FALSE, 0, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_SWISS, "Minecraft");//创建字体
txt1 = CreateWindow("STATIC", "CommandlineUI", WS_CHILD | WS_VISIBLE | SS_NOTIFY, 10, 10, 120, 20, hwnd, (HMENU)IDC_2, g_hInstance, NULL);//创建静态文本
SendMessage(txt1, WM_SETFONT, (WPARAM)hFont, TRUE);//发送设置字体消息
break;
}
case WM_PAINT:
hdc = BeginPaint(hwnd, &ps); // 8
hdcMem = CreateCompatibleDC(hdc); // 9
SelectObject(hdcMem, hBitmap); // 10
BitBlt(hdc, 375, 5, bmWidth, bmHeight, hdcMem, 0, 0, SRCCOPY); // 11 显示位图
DeleteDC(hdcMem); // 12
// 8
hdcMem = CreateCompatibleDC(hdc); // 9
SelectObject(hdcMem, hBitmap2); // 10
BitBlt(hdc, 347, 5, bmWidth, bmHeight, hdcMem, 0, 0, SRCCOPY); // 11 显示位图
DeleteDC(hdcMem); // 12
EndPaint(hwnd, &ps); // 13
hBitmap = LoadBitmap(hInstance, MAKEINTRESOURCE(IDB_BITMAP3));
hdc2 = GetDC(hwnd);
hdcMem = CreateCompatibleDC(hdc);
SelectObject(hdcMem, hBitmap);
BitBlt(hdc, 375, 5, bmWidth, bmHeight, hdcMem, 0, 0, SRCCOPY); // 11 显示位图
ReleaseDC(hwnd, hdcMem);
ReleaseDC(hwnd, hdc);
msLast = WM_MOUSEHOVER;
hBitmap = LoadBitmap(hInstance, MAKEINTRESOURCE(IDB_BITMAP1));
hdc = GetDC(hwnd);
hdcMem = CreateCompatibleDC(hdc);
SelectObject(hdcMem, hBitmap);
BitBlt(hdc, 375, 5, bmWidth, bmHeight, hdcMem, 0, 0, SRCCOPY);
ReleaseDC(hwnd, hdcMem);
ReleaseDC(hwnd, hdc);
msLast = WM_MOUSELEAVE;
break;
case WM_CTLCOLORSTATIC://拦截WM_CTLCOLORSTATIC消息
{
if ((HWND)lParam == GetDlgItem(hwnd, IDC_2))//2
{
SetTextColor((HDC)wParam, RGB(165, 120, 120));
SetBkMode((HDC)wParam, TRANSPARENT);
}
if ((HWND)lParam == GetDlgItem(hwnd, IDC_CLOSE))//2
{
SetTextColor((HDC)wParam, RGB(199, 0, 0));
SetBkMode((HDC)wParam, TRANSPARENT);
}
if ((HWND)lParam == GetDlgItem(hwnd, IDC_MINIMIZE))//2
{
SetTextColor((HDC)wParam, RGB(199, 0, 0));
SetBkMode((HDC)wParam, TRANSPARENT);
}
return (INT_PTR)GetStockObject((NULL_BRUSH));//返回一个空画刷(必须)
}
case WM_MOUSEMOVE:
{
if (BmpHitTest(hwnd, lParam) > 0)
{
if (msLast == WM_MOUSELEAVE) SendMessage(hwnd, WM_MOUSEHOVER, 0, 0);
}
else
{
if (msLast == WM_MOUSEHOVER) SendMessage(hwnd, WM_MOUSELEAVE, 0, 0);
}
TRACKMOUSEEVENT tme;
tme.cbSize = sizeof(TRACKMOUSEEVENT);
tme.dwFlags = TME_HOVER | TME_LEAVE;
tme.dwHoverTime = 15;
tme.hwndTrack = hwnd;
_TrackMouseEvent(&tme);
break;
}
case WM_MOUSEHOVER:
{// red
hBitmap = LoadBitmap(hInstance, MAKEINTRESOURCE(IDB_BITMAP3));
hdc2 = GetDC(hwnd);
hdcMem = CreateCompatibleDC(hdc);
SelectObject(hdcMem, hBitmap);
BitBlt(hdc, 375, 5, bmWidth, bmHeight, hdcMem, 0, 0, SRCCOPY); // 11 显示位图
ReleaseDC(hwnd, hdcMem);
ReleaseDC(hwnd, hdc);
msLast = WM_MOUSEHOVER;
break;
}
case WM_MOUSELEAVE:
{// green
hBitmap = LoadBitmap(hInstance, MAKEINTRESOURCE(IDB_BITMAP1));
hdc = GetDC(hwnd);
hdcMem = CreateCompatibleDC(hdc);
SelectObject(hdcMem, hBitmap);
BitBlt(hdc, 375, 5, bmWidth, bmHeight, hdcMem, 0, 0, SRCCOPY);
ReleaseDC(hwnd, hdcMem);
ReleaseDC(hwnd, hdc);
msLast = WM_MOUSELEAVE;
break;
}
case WM_SIZE:
{
LONG_PTR Style = ::GetWindowLongPtr(hwnd, GWL_STYLE);
Style = Style & ~WS_CAPTION & ~WS_SYSMENU & ~WS_SIZEBOX;
::SetWindowLongPtr(hwnd, GWL_STYLE, Style);
break;
}
case WM_LBUTTONDOWN:
{
if (BmpHitTest(hwnd, lParam) > 0)
{
DeleteObject(hBitmap);
DeleteObject(hFont);
PostQuitMessage(0);
break;
}
if (MINIMIZE1(hwnd, lParam) > 0)
{
SendMessage(hwnd, WM_SYSCOMMAND, SC_MINIMIZE, 0); // 最小化
break;
}
// 移动 窗口
SendMessage(hwnd, WM_NCLBUTTONDOWN, HTCAPTION, 0); //向窗口发送WM_NCLBUTTONDOWN消息,HTCAPTION 标题
break;
}
case WM_COMMAND:
{
switch (LOWORD(wParam))
{
case IDC_2:
MessageBox(hwnd, "标题栏的消息响应(这明明是静态文本)xD", "提示", MB_OK | MB_ICONINFORMATION);
break;
case IDC_3:
MessageBox(hwnd, "您点击了按钮。(我需要告诉你你做了什么)", "提示", MB_OK | MB_ICONINFORMATION);
break;
case IDB_BITMAP1:
{
case WM_DESTROY:
{
DeleteObject(hBitmap); // 14
DeleteObject(hFont);//删除所创建字体对象
PostQuitMessage(0);
break;
}
}
case IDC_MINIMIZE:
{
SendMessage(hwnd, WM_SYSCOMMAND, SC_MINIMIZE, 0); // 最小化
break;
}
break;
}
break;
}
}
return DefWindowProc(hwnd, uMsg, wParam, lParam);
}
case WM_MOUSEMOVE:
{
if(BmpHitTest(hwnd,lParam)>0)
{
if(msLast==WM_MOUSELEAVE) SendMessage(hwnd,WM_MOUSEHOVER,0,0);
}
else
{
if(msLast==WM_MOUSEHOVER) SendMessage(hwnd,WM_MOUSELEAVE,0,0);
}
// TRACKMOUSEEVENT tme;
// tme.cbSize = sizeof(TRACKMOUSEEVENT);
// tme.dwFlags = TME_HOVER | TME_LEAVE;
// tme.dwHoverTime = 15;
// tme.hwndTrack = hwnd;
// _TrackMouseEvent(&tme);
break;
}
case WM_MOUSEHOVER:
{// red
hBitmap = LoadBitmap(hInstance, MAKEINTRESOURCE(IDB_BITMAP1));
hdc = GetDC(hwnd);
hdcMem = CreateCompatibleDC(hdc);
SelectObject(hdcMem, hBitmap);
BitBlt(hdc, 300, 5, bmWidth, bmHeight, hdcMem, 0, 0, SRCCOPY); // 11 显示位图
ReleaseDC(hwnd,hdcMem);
ReleaseDC(hwnd,hdc);
msLast=WM_MOUSEHOVER;
break;
}
case WM_MOUSELEAVE:
{// green
hBitmap1 = LoadBitmap(hInstance, MAKEINTRESOURCE(IDB_BITMAP2));
hdc = GetDC(hwnd);
hdcMem = CreateCompatibleDC(hdc);
SelectObject(hdcMem, hBitmap1);
BitBlt(hdc, 300, 5, bmWidth, bmHeight, hdcMem, 0, 0, SRCCOPY);
ReleaseDC(hwnd,hdcMem);
ReleaseDC(hwnd,hdc);
msLast=WM_MOUSELEAVE;
break;
}