15,979
社区成员
发帖
与我相关
我的任务
分享
#include <windows.h>
#include "resource.h"
LRESULT CALLBACK WndProc(HWND hWnd,
UINT uMsg,
WPARAM wParam,
LPARAM lParam
);
BOOL CALLBACK DlgWindowProc(HWND hWndDlg,
UINT uMsg,
WPARAM wParam,
LPARAM lParam
);
int WINAPI WinMain(HINSTANCE hInstance, // 输入参数:当前程序的实例句柄
HINSTANCE hPrevInstance, // 任选输入参数:以前程序的实例句柄
LPSTR lpCmdLine, // 任选输入参数:命令行
int nShowCmd // 输入参数:当前窗口的显示方式
)
{
static TCHAR szAppName[] = TEXT("Modal Dialog");
HWND hWnd; // 窗口句柄
MSG msg; // 窗口消息结构体
HACCEL hAccTable; // 加速器表资源句柄
WNDCLASS wndcls; // 窗口类别信息结构体
wndcls.style = CS_HREDRAW | CS_VREDRAW; // 窗口样式
wndcls.lpfnWndProc = WndProc; // 窗口过程函数指针
wndcls.cbClsExtra = 0; // 窗口类别附加数据
wndcls.cbWndExtra = 0; // 窗口类别附加数据
wndcls.hInstance = hInstance; // 拥有窗口类别的窗口实例句柄
wndcls.hIcon = LoadIcon(hInstance, NULL); // 最小窗口图标
wndcls.hCursor = LoadCursor(NULL, IDC_ARROW); // 窗口内使用的光标
wndcls.hbrBackground= (HBRUSH)GetStockObject(WHITE_BRUSH); // 用来着色窗口的背景刷子
wndcls.lpszMenuName = NULL; // 指向菜单资源名的指针
wndcls.lpszClassName= szAppName; // 指向窗口类名的指针
if (!RegisterClass(&wndcls)) // 窗口注册登记函数在系统中注册当前的窗口类别
{
MessageBox(NULL, TEXT("This program requires Windows version!"),
szAppName, MB_ICONERROR); // 显示消息框的函数
return 0;
}
hWnd = CreateWindow(szAppName, // 注册窗口结构(类型)的名字
TEXT("Hello CT11 Window"), // 窗口标题
WS_OVERLAPPEDWINDOW, // 窗口样式
CW_USEDEFAULT, // x 位置
CW_USEDEFAULT, // y 位置
CW_USEDEFAULT, // x 大小
CW_USEDEFAULT, // y 大小
NULL, // 父窗体样式
NULL, // 窗口菜单栏句柄
hInstance, // 程序实例句柄
NULL // 创建窗口的附加参数
);
ShowWindow(hWnd, nShowCmd); // 在屏幕上显示当前窗口
UpdateWindow(hWnd); // 指示当前窗口自我更新(发送WM_PAINT)消息
// 重画窗口——使窗口恢复成以前的那个样
while (GetMessage(&msg, NULL, 0, 0)) // 从消息队列中取得消息
{
if (TranslateAccelerator(hWnd, hAccTable, &msg) == 0) // 处理快捷键函数
{
TranslateMessage(&msg); // 转译某些键盘消息
DispatchMessage(&msg); // 将消息发送给窗口消息处理程序(窗口过程回调函数)
}
}
return (int)msg.wParam;
}
//////////////////////////////////////////////////////////////////////////
// 主窗口回调函数
//
LRESULT CALLBACK WndProc(HWND hWnd, // 窗口句柄
UINT uMsg, // 传入的消息
WPARAM wParam, // 该消息的其他附加信息,其含义与具体的消息有关
LPARAM lParam // 该消息的其他附加信息,其含义与具体的消息有关
)
{
static HINSTANCE hInstance;
RECT rct;
HDC hdc;
HDC hdcSrc;
BITMAP bitmap;
HBITMAP hBitmap;
PAINTSTRUCT ps;
switch(uMsg)
{
case WM_CREATE:
break;
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
hBitmap = LoadBitmap((HINSTANCE)GetWindowLong(hWnd, GWL_HINSTANCE), MAKEINTRESOURCE(IDB_BITMAP_BACKGROUND));
GetObject(hBitmap, sizeof(BITMAP), &bitmap);
hdcSrc = CreateCompatibleDC(hdc) ; //源
SelectObject(hdcSrc, hBitmap);
StretchBlt(hdc,0, 0, 400, 400, hdcSrc, 0, 0, bitmap.bmWidth, bitmap.bmHeight, SRCCOPY) ;
DeleteDC (hdcSrc) ;
EndPaint (hWnd, &ps) ;
break;
case WM_DESTROY:
PostQuitMessage(0); // 在消息队列中插入一个“退出程序”的消息
break;
default:
return DefWindowProc(hWnd, uMsg, wParam, lParam); // 执行默认的窗口过程回调函数
}
return 0;
}