win32 绘制超酷界面(一)
来源:互联网 发布:梦幻西游手游秒抢软件 编辑:程序博客网 时间:2024/05/17 07:39
一般来说,在项目中为了更友好的提示用户,我们一般会采用弹出对话框的实施方案。可是我们在实际的应用中,往往要自己定义一个界面,取代系统的对话框。在win API中,那个对话框就别提了【吐槽:我是不想用,不好看】
废话就不多说了,直接进入主题。今天的自定义对话框就是一个窗体。
今天只是实现一个传说中的按钮,功能以后实现,实现效果如下
- 用VS新建一个win32工程【也可以自己建立一个空的工程,这里不是重点】,我的工程名字为:WndEx;
添加菜单【省略】
添加两个文件About.h和About.cpp,分别喜爱那个文件添加代码
file : About.h
#ifndef About_h#define About_hvoid OnMenuAbout(); // 在消息处理函数,菜单点击时调用#endif
file:About.cpp
#include "stdafx.h"#include "About.h"#include "resource.h"#define MAX_LOADSTRING 100#define WND_CLASS_ABOUT L"CLASS_ABOUT" // 创建的窗口ID#define ABOUT_WIN_TITLE L"About" // 窗口标题
3.1 注册,创建一个窗口类
void OnMenuAbout(){ HWND About; HINSTANCE hInstance = GetModuleHandle(NULL); WNDCLASSEX wcex; ZeroMemory(&wcex, sizeof(WNDCLASSEX)); wcex.cbSize = sizeof(WNDCLASSEX); wcex.style = CS_HREDRAW | CS_VREDRAW; wcex.hInstance = GetModuleHandle(NULL); wcex.hCursor = LoadCursor(NULL, IDC_ARROW); wcex.lpszClassName = WND_CLASS_ABOUT; wcex.lpfnWndProc = (WNDPROC)AboutProc; // 消息处理函数,实现在后边 wcex.hIcon = LoadIcon(GetModuleHandle(NULL), MAKEINTRESOURCE(IDI_WNDEX)); RegisterClassEx(&wcex); About = CreateWindow( WND_CLASS_ABOUT, ABOUT_WIN_TITLE, WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU, CW_USEDEFAULT, CW_USEDEFAULT, 400, 250, NULL, NULL, hInstance, NULL); if (!About) return; ShowWindow(About, SW_SHOW);}
3.2 消息处理函数
INT_PTR CALLBACK AboutProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam){ HDC hdc; switch (msg) { case WM_CREATE: break; case WM_PAINT: PAINTSTRUCT ps; hdc = BeginPaint(hwnd, &ps); OnPaint(hwnd, hdc); // 绘制界面 EndPaint(hwnd,&ps); break; case WM_DESTROY: DestroyWindow(hwnd); break; default: return DefWindowProc(hwnd, msg, wParam, lParam); } return 0;}
3.3 界面绘制的实现
void OnPaint(HWND hwnd, HDC hdc){ RECT rc; GetClientRect(hwnd, &rc); SetBkMode(hdc, TRANSPARENT); HBRUSH br = CreateSolidBrush(RGB(0xff,0xff,0xff)); FillRect(hdc, &rc, br); const WCHAR *Name = L"BUTTON"; SIZE txtSize; GetTextExtentPoint32(hdc, Name, wcslen(Name), &txtSize); RECT rcButton; rcButton.left = (rc.right - rc.left - txtSize.cx)/2 - 5; rcButton.right = (rc.right + rc.left + txtSize.cx)/2 + 5; rcButton.top = rc.bottom - txtSize.cy - 30; rcButton.bottom = rc.bottom - 20; HBRUSH br2 = CreateSolidBrush(RGB(0x00,0x99,0x00)); FillRect(hdc, &rcButton, br2); SetTextColor(hdc, RGB(0xff,0xff,0xff)); TextOut(hdc, rcButton.left+5, rcButton.top+5, Name, wcslen(Name)); DeleteObject(br); DeleteObject(br2);}
项目中用到的真实案例,希望相互学习。如果有什么不足,一起交流学习。
0 0
- win32 绘制超酷界面(一)
- win32 绘制超酷界面(二)
- WIN32界面开发之三:DUI雏形开发(一)
- WIN32界面开发之三:DUI雏形开发(一)
- WIN32界面开发之DUI雏形开发(一)
- win32开发(图形绘制)
- win32开发(绘制bitmap)
- 扇形绘制(超低效率)
- win32界面
- win32界面
- 跟我一起学Windows界面封装(一) 之 基础篇:Win32 API
- Win32 API(一)
- Python 如何绘制圆,Python绘制圆(超棒!!)
- Windows系统功能模拟 C++(EasyX插件)—— 3rd 界面绘制(一)
- 一个超酷的界面程序源代码
- Win32汇编:绘制文本
- Win32 绘制矩形2
- [Win32]曲线绘制
- hpux启停和运行级别
- ARM大小核big.LITTLE的HMP调度器
- JVM详述原理
- Linux命令---指定到具体时间
- 小学生算数系统
- win32 绘制超酷界面(一)
- 03-树2 List Leaves (25分) (查找叶子节点)
- Linux和window下的文件路径问题
- form的action和Excel下载按钮提交的不是同一个url
- Android studio aar 混淆
- AngularJS基础二
- 新一代IT人才正在路上
- 8、人脸识别经典算法一:特征脸方法(Eigenface)
- Android自定义View之高仿卫星发散控件