用vs2015设计简单登录页面加验证码登录添加背景图
时间: 2024-05-01 07:19:56 浏览: 8
首先,我们需要创建一个新的 Win32 项目。在创建项目时,请选择“Win32控制台应用程序”模板并命名您的项目。
接下来,我们需要添加必要的文件和代码。请按照以下步骤操作:
1. 在项目中,右键单击“资源文件”文件夹并选择“添加资源”。
2. 选择“位图”并单击“导入”按钮以添加您的背景图。
3. 打开“stdafx.h”文件并添加以下代码:#include <CommCtrl.h>
4. 打开“main.cpp”文件并添加以下代码:
```C++
#include <Windows.h>
#include <CommCtrl.h>
#pragma comment (lib, "Comctl32.lib")
// 全局变量:
HINSTANCE hInst; // 当前实例
HWND hMainWnd; // 主窗口句柄
HWND hUsernameEdit, hPasswordEdit, hCodeEdit; // 用户名、密码、验证码输入框句柄
HBITMAP hBitmap; // 背景图片句柄
// 此代码模块中包含的函数的前向声明:
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
INT_PTR CALLBACK About(HWND, UINT, WPARAM, LPARAM);
bool DrawBitmap(HWND hWnd, HDC hDC, HBITMAP hBitmap);
// Win32程序入口
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
UNREFERENCED_PARAMETER(hPrevInstance);
UNREFERENCED_PARAMETER(lpCmdLine);
// 初始化全局变量
hInst = hInstance;
// 初始化公共控件
InitCommonControls();
// 注册窗口类
WNDCLASSEX wcex;
wcex.cbSize = sizeof(WNDCLASSEX);
wcex.style = CS_HREDRAW | CS_VREDRAW;
wcex.lpfnWndProc = WndProc;
wcex.cbClsExtra = 0;
wcex.cbWndExtra = 0;
wcex.hInstance = hInstance;
wcex.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_APPLICATION));
wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
wcex.lpszMenuName = MAKEINTRESOURCE(IDI_APPLICATION);
wcex.lpszClassName = "LoginWindow";
wcex.hIconSm = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_APPLICATION));
if (!RegisterClassEx(&wcex))
{
MessageBox(NULL,
"窗口注册失败",
"错误",
MB_ICONEXCLAMATION | MB_OK);
return 0;
}
// 创建窗口
hMainWnd = CreateWindow(
"LoginWindow",
"登录",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT, 400, 300,
NULL, NULL, hInstance, NULL);
if (!hMainWnd)
{
MessageBox(NULL,
"窗口创建失败",
"错误",
MB_ICONEXCLAMATION | MB_OK);
return 0;
}
// 显示窗口
ShowWindow(hMainWnd, nCmdShow);
UpdateWindow(hMainWnd);
// 消息循环
MSG msg;
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return (int)msg.wParam;
}
// 窗口过程
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_CREATE:
// 创建用户名输入框
hUsernameEdit = CreateWindowEx(
WS_EX_CLIENTEDGE,
"EDIT",
"",
WS_CHILD | WS_VISIBLE | ES_AUTOHSCROLL,
100, 50, 200, 25,
hWnd, NULL, hInst, NULL);
// 创建密码输入框
hPasswordEdit = CreateWindowEx(
WS_EX_CLIENTEDGE,
"EDIT",
"",
WS_CHILD | WS_VISIBLE | ES_PASSWORD | ES_AUTOHSCROLL,
100, 100, 200, 25,
hWnd, NULL, hInst, NULL);
// 创建验证码输入框
hCodeEdit = CreateWindowEx(
WS_EX_CLIENTEDGE,
"EDIT",
"",
WS_CHILD | WS_VISIBLE | ES_AUTOHSCROLL,
100, 150, 100, 25,
hWnd, NULL, hInst, NULL);
// 创建“登录”按钮
CreateWindow(
"BUTTON",
"登录",
WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
100, 200, 100, 30,
hWnd, (HMENU)1, hInst, NULL);
// 创建“取消”按钮
CreateWindow(
"BUTTON",
"取消",
WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
200, 200, 100, 30,
hWnd, (HMENU)2, hInst, NULL);
// 加载背景图片
hBitmap = (HBITMAP)LoadImage(NULL, "bg.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
break;
case WM_COMMAND:
switch (LOWORD(wParam))
{
case 1: // “登录”按钮被单击
// TODO: 在此添加登录代码
MessageBox(hWnd, "登录成功", "提示", MB_OK);
break;
case 2: // “取消”按钮被单击
// 退出程序
PostQuitMessage(0);
break;
}
break;
case WM_PAINT:
{
PAINTSTRUCT ps;
HDC hdc = BeginPaint(hWnd, &ps);
// 绘制背景图片
DrawBitmap(hWnd, hdc, hBitmap);
EndPaint(hWnd, &ps);
}
break;
case WM_DESTROY:
// 释放资源
DeleteObject(hBitmap);
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}
// 绘制位图
bool DrawBitmap(HWND hWnd, HDC hDC, HBITMAP hBitmap)
{
BITMAP bm;
HDC hdcMem;
HGDIOBJ oldBitmap;
hdcMem = CreateCompatibleDC(hDC);
oldBitmap = SelectObject(hdcMem, hBitmap);
GetObject(hBitmap, sizeof(bm), &bm);
BitBlt(hDC, 0, 0, bm.bmWidth, bm.bmHeight, hdcMem, 0, 0, SRCCOPY);
SelectObject(hdcMem, oldBitmap);
DeleteDC(hdcMem);
return true;
}
```
在上面的代码中,我们创建了窗口并添加了三个文本框(用户名、密码和验证码)以及两个按钮(登录和取消)。我们还加载了一个背景图片并在窗口绘制时将其绘制出来。
最后,我们需要将我们的背景图片保存为“bg.bmp”并将其放置在与项目文件相同的目录中。
编译并运行代码,您应该能够看到一个带有背景图片的登录窗口。