|
自绘标题栏主要是想更全面的DIY自己的窗口,隐藏系统自带标题栏后,需要自己绘制标题栏,然后在上面做消息相应,还要做最大化 最小化 关闭的处理,听起来很麻烦,其实代码量很少,这样一来软件界面的设置完全自定义了。具体原理不多说,代码如下:
- // test.cpp : Defines the entry point for the application.
- //
- #include "stdafx.h"
- #include "test.h"
- #pragma comment(lib, "XCGUId.lib")
- #include "xcgui.h"
- //设置标题栏高度
- #define TITLE_HEIGHT 30
- //窗口句柄
- HWINDOW hWin=NULL;
- //标题栏变量
- HELE titlePic=NULL;
- //处理鼠标按下消息 用于移动自绘标题栏
- BOOL CALLBACK WinMouseLeftDown(HWINDOW hWindow,UINT flags,POINT *pPt)
- {
- //如果不是子元素 且在标题栏高度内
- if(!XEle_IsHitChildEle(titlePic, pPt) && pPt->y<=TITLE_HEIGHT)
- {
- ::PostMessage(XWnd_GetHWnd(hWindow), WM_NCLBUTTONDOWN,HTCAPTION,MAKELPARAM(pPt->x,pPt->y));
- }
- return FALSE;
- }
- //关闭按钮功能
- BOOL CALLBACK CloseOnClick(HELE hEle,HELE hEventEle)
- {
- if (hEventEle==hEle)
- {
- XWnd_CloseWindow(XEle_GetHWindow(hEle));
- }
- return FALSE;
- }
- int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow)
- {
- XInitXCGUI();
- //创建无标题栏窗口
- hWin=XWnd_CreateWindow(0, 0, 200, 100, NULL, NULL, XC_SY_CENTER | XC_SY_BORDER );
- XWnd_ShowWindow(hWin,SW_SHOW);
- //设置边框大小
- XWnd_SetBorderSize(hWin, 2, 2, 2, 2);
- //绘制假标题栏
- RECT p;
- GetWindowRect(XWnd_GetHWnd(hWin), &p);
- int width=p.right-p.left, height=p.bottom-p.top;
- titlePic=XPic_Create(0, 0, width, TITLE_HEIGHT, hWin);
- //加载图片 拉伸显示
- XPic_SetImage(titlePic, XImage_LoadRes (IDB_TITLE_BJ, L"PNG", TRUE));
- //设置鼠标左键消息 用于拖动标题栏
- XWnd_RegisterMessage(hWin, WM_LBUTTONDOWN, WinMouseLeftDown);
- //设置标题
- HELE titleStatic=XStatic_Create(10, 5, 100, 30, L"自绘标题栏", hWin);
- //设置透明
- XEle_SetBkTransparent(titleStatic, TRUE);
- XEle_SetTextColor(titleStatic, RGB(255, 255, 255));
- //设置关闭按钮
- HELE sysCloseBtn=XBtn_Create(170, 3, 20, 20, NULL, titlePic);
- XEle_RegisterEvent(sysCloseBtn, XE_BNCLICK, CloseOnClick);
- XRunXCGUI();
- return 0;
- }
复制代码
|
|