1 Star 0 Fork 0

JuliusCaesar / win32_mingw

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
init.c 8.24 KB
一键复制 编辑 原始数据 按行查看 历史
JuliusCaesar 提交于 2023-12-26 22:09 . init d3d in showwindow
#include "init.h"
#include "event.h"
#include "resource/resource.h"
#include "gfx/d3d.h"
#define MAX_LOADSTRING 128
CHAR title[MAX_LOADSTRING], subTitle[MAX_LOADSTRING]; // 标题栏文本
CHAR clazz[MAX_LOADSTRING], subClazz[MAX_LOADSTRING]; // 标题栏文本
BOOL InitSubInstance(HINSTANCE, INT);
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
LRESULT CALLBACK GraphicProc(HWND, UINT, WPARAM, LPARAM);
LRESULT CALLBACK AboutDialogProc(HWND, UINT, WPARAM, LPARAM);
extern HINSTANCE instance;
extern HANDLE outputHandle;
const USHORT ScreenWidth = 720, ScreenHeight = 480, GraphicWidth = 1920, GraphicHeight = 1080;
enum KEY_BINDING {
CTRL_A,
};
HWND window, subWindow;
CHAR outputBuffer[1024];
CHAR imagePath[MAX_PATH];
DWORD d3dRenderThreadId, taskThreadId;
HANDLE hD3dRenderThread, hTaskThread;
ATOM MyRegisterClass(HINSTANCE hInstance) {
LoadString(hInstance, IDS_APP_TITLE, title, MAX_LOADSTRING);
LoadString(hInstance, IDS_CLASS_NAME, clazz, MAX_LOADSTRING);
LoadString(hInstance, IDS_D3D_TITLE, subTitle, MAX_LOADSTRING);
LoadString(hInstance, IDS_SUB_CLASS_NAME, subClazz, MAX_LOADSTRING);
WNDCLASSEX wndClass = {
sizeof(WNDCLASSEX),
CS_HREDRAW | CS_VREDRAW,
WndProc,
0,
0,
hInstance,
LoadIcon(hInstance, MAKEINTRESOURCE(IDI_ICON_DEFAULT)),
LoadCursor(NULL, IDC_ARROW),
GetStockObject(WHITE_BRUSH),
MAKEINTRESOURCE(IDC_MENU_NAME),
clazz,
LoadIcon(hInstance, MAKEINTRESOURCE(IDI_ICON_SMALL))
}, graphicClass = {
sizeof(WNDCLASSEX),
CS_HREDRAW | CS_VREDRAW,
GraphicProc,
0,
0,
hInstance,
LoadIcon(hInstance, MAKEINTRESOURCE(IDI_ICON_DEFAULT)),
LoadCursor(NULL, IDC_ARROW),
GetStockObject(WHITE_BRUSH),
NULL,
subClazz,
LoadIcon(hInstance, MAKEINTRESOURCE(IDI_ICON_SMALL))
};
RegisterClassEx(&wndClass);
RegisterClassEx(&graphicClass);
return 0;
}
BOOL InitInstance(HINSTANCE hInstance, INT nCmdShow) {
window = CreateWindow(
clazz, // Window class
title, // Window text
WS_OVERLAPPEDWINDOW, // Window style
CW_USEDEFAULT, CW_USEDEFAULT, ScreenWidth, ScreenHeight,
NULL, // Parent window
NULL, // Menu
hInstance, // Instance handle
NULL // Additional application data
);
if (!window) {
return FALSE;
}
ShowWindow(window, nCmdShow);
UpdateWindow(window);
RegisterHotKey(window, CTRL_A, MOD_CONTROL | MOD_NOREPEAT, 'A');
return TRUE;
}
BOOL InitSubInstance(HINSTANCE hInstance, INT nCmdShow) {
subWindow = CreateWindow(
subClazz, // Window class
subTitle, // Window text
WS_OVERLAPPEDWINDOW, // Window style
CW_USEDEFAULT, CW_USEDEFAULT, GraphicWidth, GraphicHeight,
NULL, // Parent window
NULL, // Menu
hInstance, // Instance handle
NULL // Additional application data
);
if (!subWindow) {
return FALSE;
}
ShowWindow(subWindow, nCmdShow);
UpdateWindow(subWindow);
SetupEventHandler();
return TRUE;
}
LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) {
switch (message) {
case WM_DESTROY:
PostQuitMessage(0);
break;
case WM_COMMAND:
switch (wParam) {
case IDM_OPEN:
ShowImage(hwnd);
break;
case IDM_NEW: {
if (subWindow == NULL) {
InitSubInstance(instance, 1);
}
}
break;
case IDM_EXIT:
DestroyWindow(hwnd);
break;
case IDM_ABOUT: {
CreateDialog(instance, MAKEINTRESOURCE(IDD_ABOUTBOX), hwnd, AboutDialogProc);
}
break;
}
break;
case WM_HOTKEY: {
switch (wParam) {
case CTRL_A:
MessageBox(hwnd, TEXT("Ctrl + A?"), TEXT("INFO"), MB_YESNO);
break;
}
}
break;
case WM_CLOSE:
// if (MessageBox(window, TEXT("Close window?"), TEXT("INFO"), MB_YESNO) != IDYES) {
// return 0;
// }
break;
}
return DefWindowProc(hwnd, message, wParam, lParam);
}
LRESULT CALLBACK GraphicProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) {
static DWORD exitCode;
switch (message) {
case WM_SHOWWINDOW:
InitD3D(subWindow);
InitVB();
hTaskThread = CreateThread(NULL, 0, ThreadTask, NULL, 0, &taskThreadId);
hD3dRenderThread = CreateThread(NULL, 0, Display, NULL, 0, &d3dRenderThreadId);
break;
case WM_SIZE:
GetExitCodeThread(hD3dRenderThread, &exitCode);
if (IsIconic(hwnd)) {
if (exitCode == STILL_ACTIVE)
TerminateThread(hD3dRenderThread, 0);
} else {
if (exitCode != STILL_ACTIVE)
hD3dRenderThread = CreateThread(NULL, 0, Display, NULL, 0, &d3dRenderThreadId);
}
break;
case WM_CLOSE:
TerminateThread(hD3dRenderThread, 0);
RemoveEventHandler();
break;
case WM_DESTROY:
Release();
subWindow = NULL;
break;
}
return DefWindowProc(hwnd, message, wParam, lParam);
}
/*关于 对话框*/
LRESULT CALLBACK AboutDialogProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) {
static PBRANGE range;
switch (message) {
case WM_INITDIALOG: {
SendDlgItemMessage(hDlg, IDC_PROGRESS1, PBM_SETRANGE, TRUE, MAKELONG(0, 100));
SendDlgItemMessage(hDlg, IDC_PROGRESS1, PBM_GETRANGE, TRUE, (LPARAM) &range);
SendDlgItemMessage(hDlg, IDC_SLIDER1, TBM_SETRANGE, TRUE, MAKELONG(0, 100));
SendDlgItemMessage(hDlg, IDC_SLIDER1, TBM_SETPOS, TRUE, 50);
SendDlgItemMessage(hDlg, IDC_PROGRESS1, PBM_SETPOS, 50, TRUE);
sprintf(outputBuffer, TEXT("Slider progress %d%%.\n"), 50);
SendDlgItemMessage(hDlg, IDC_EDIT1, WM_SETTEXT, 0, (LPARAM) outputBuffer);
SendDlgItemMessage(hDlg, IDC_COMBO1, CB_ADDSTRING, TRUE, (LPARAM) "100");
SendDlgItemMessage(hDlg, IDC_COMBO1, CB_ADDSTRING, TRUE, (LPARAM) "200");
SendDlgItemMessage(hDlg, IDC_COMBO1, CB_ADDSTRING, TRUE, (LPARAM) "300");
// HBITMAP bitmap = LoadBitmap(instance, "resource/application.ico");
// HANDLE handle = LoadImage(instance, imagePath, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
// LRESULT ret = SendDlgItemMessage(hDlg, IDC_PICTURE, STM_SETIMAGE, IMAGE_BITMAP,
// (LPARAM) bitmap);
}
break;
case WM_HSCROLL: {
LRESULT i = SendDlgItemMessage(hDlg, IDC_SLIDER1, TBM_GETPOS, 0, 0);
sprintf(outputBuffer, TEXT("Slider progress %lld%%.\n"), i);
SendDlgItemMessage(hDlg, IDC_EDIT1, WM_SETTEXT, 0, (LPARAM) outputBuffer);
SendDlgItemMessage(hDlg, IDC_PROGRESS1, PBM_SETPOS, (WPARAM) i, TRUE);
}
break;
case WM_NOTIFY: {
if (wParam == IDC_DATETIMEPICKER1) {
if (((NMHDR *) lParam)->code == DTN_DATETIMECHANGE) {
SYSTEMTIME st = ((LPNMDATETIMECHANGE) lParam)->st;
sprintf(outputBuffer, TEXT("Slider progress %d.\n"), st.wYear);
WriteConsole(outputHandle, outputBuffer, strlen(outputBuffer), NULL, NULL);
}
}
}
break;
case WM_COMMAND:
if (LOWORD(wParam) == IDOK) {
EndDialog(hDlg, LOWORD(wParam));
}
break;
case WM_CLOSE:
EndDialog(hDlg, LOWORD(wParam));
default:
return FALSE;
}
return TRUE;
}
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
C
1
https://gitee.com/juliuscaesar/win32_mingw.git
git@gitee.com:juliuscaesar/win32_mingw.git
juliuscaesar
win32_mingw
win32_mingw
master

搜索帮助

344bd9b3 5694891 D2dac590 5694891