//----------------------------------------- //Name : WinMain(); //Desc : Windows应用程序入口函数 //---------------------------------------- int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nShowCmd ) { WNDCLASS wndclass; //设计窗口类 wndclass.cbClsExtra=0; wndclass.cbWndExtra=0; wndclass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH); wndclass.hCursor=LoadCursor(NULL,IDC_ARROW); wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION); wndclass.hInstance=hInstance; wndclass.lpfnWndProc=WinMainProc; wndclass.lpszClassName=g_pClassName; wndclass.lpszMenuName=NULL; wndclass.style=CS_HREDRAW|CS_VREDRAW; //注册窗口 if (!RegisterClass(&wndclass)) { MessageBox(NULL,L"注册窗口失败",L"错误提示",NULL); return 1; } //创建窗口 HWND hWnd=CreateWindow(g_pClassName,g_pWindowName,WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,500,500,NULL,NULL,hInstance,NULL); if (!hWnd) { MessageBox(NULL,L"创建窗口失败",L"错误提示",NULL); return 1; } //初始化 Direct3D InitDirect3D(hWnd); //显示窗口 ShowWindow(hWnd,SW_SHOWNORMAL); //更新窗口 UpdateWindow(hWnd); //处理消息 MSG msg; ZeroMemory(&msg,sizeof(msg)); while(msg.message!=WM_QUIT) { //从消息队列中取消息并删除队列中消息 if (PeekMessage(&msg,NULL,0,0,PM_REMOVE)) { TranslateMessage(&msg);//转换消息 DispatchMessage(&msg);//分发消息 } else { Direct3DRender();//绘制3D场景 } } UnregisterClass(g_pClassName,hInstance); return (int)msg.wParam; }
int WINAPI WinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ LPSTR lpCmdLine, _In_ int nShowCmd) { //【1】窗口创建四步曲之一:开始设计一个完整的窗口类 WNDCLASSEX wndClass = { 0 }; //用WINDCLASSEX定义了一个窗口类 wndClass.cbSize = sizeof(WNDCLASSEX); //设置结构体的字节数大小 wndClass.style = CS_HREDRAW | CS_VREDRAW; //设置窗口的样式 wndClass.lpfnWndProc = WndProc; //设置指向窗口过程函数的指针 wndClass.cbClsExtra = 0; //窗口类的附加内存,取0就可以了 wndClass.cbWndExtra = 0; //窗口的附加内存,依然取0就行了 wndClass.hInstance = hInstance; //指定包含窗口过程的程序的实例句柄。 wndClass.hIcon = (HICON)::LoadImage(NULL, L"icon.ico", IMAGE_ICON, 0, 0, LR_DEFAULTSIZE | LR_LOADFROMFILE); //本地加载自定义ico图标 wndClass.hCursor = LoadCursor(NULL, IDC_ARROW); //指定窗口类的光标句柄。 wndClass.hbrBackground = (HBRUSH)GetStockObject(GRAY_BRUSH); //为hbrBackground成员指定一个白色画刷句柄 wndClass.lpszMenuName = NULL; //用一个以空终止的字符串,指定菜单资源的名字。 wndClass.lpszClassName = L"ForTheDreamOfGameDevelop"; //用一个以空终止的字符串,指定窗口类的名字。 //【2】窗口创建四步曲之二:注册窗口类 if (!RegisterClassEx(&wndClass)) //设计完窗口后,需要对窗口类进行注册,这样才能创建该类型的窗口 return -1; //【3】窗口创建四步曲之三:正式创建窗口 HWND hwnd = CreateWindowW(L"ForTheDreamOfGameDevelop", L"What the title!", //喜闻乐见的创建窗口函数CreateWindow WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, WINDOW_WIDTH, WINDOW_HEIGHT, NULL, NULL, hInstance, NULL); ShowWindow(hwnd, nShowCmd); UpdateWindow(hwnd); if (!Direct3DInit(hwnd, hInstance)) { return -1; } MSG msg{ 0 }; while (msg.message != WM_QUIT) { if (PeekMessage(&msg, 0, 0, 0, PM_REMOVE)) { TranslateMessage(&msg); DispatchMessage(&msg); } else { Direct3DRender(hwnd); } } return 0; }
int WINAPI WinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ LPSTR lpCmdLine, _In_ int nShowCmd) { WNDCLASSEX wndClass = { 0 }; //用WINDCLASSEX定义了一个窗口类 wndClass.cbSize = sizeof(WNDCLASSEX); //设置结构体的字节数大小 wndClass.style = CS_HREDRAW | CS_VREDRAW; //设置窗口的样式 wndClass.lpfnWndProc = WndProc; //设置指向窗口过程函数的指针 wndClass.cbClsExtra = 0; //窗口类的附加内存,取0就可以了 wndClass.cbWndExtra = 0; //窗口的附加内存,依然取0就行了 wndClass.hInstance = hInstance; //指定包含窗口过程的程序的实例句柄。 wndClass.hIcon = (HICON)::LoadImage(NULL, L"icon.ico", IMAGE_ICON, 0, 0, LR_DEFAULTSIZE | LR_LOADFROMFILE); //本地加载自定义ico图标 wndClass.hCursor = LoadCursor(NULL, IDC_ARROW); //指定窗口类的光标句柄。 wndClass.hbrBackground = (HBRUSH)GetStockObject(GRAY_BRUSH); //为hbrBackground成员指定一个白色画刷句柄 wndClass.lpszMenuName = NULL; //用一个以空终止的字符串,指定菜单资源的名字。 wndClass.lpszClassName = _T("ClassName"); wndClass.cbClsExtra = 0; if (!RegisterClassEx(&wndClass)) { return -1; } HWND hwnd = CreateWindow(_T("ClassName"), _T("Found This!"), WS_OVERLAPPEDWINDOW, 0, 0, WINDOW_WIDTH, WINDOW_HEIGHT, nullptr, nullptr, hInstance, nullptr); ShowWindow(hwnd, nShowCmd); UpdateWindow(hwnd); if (!Direct3DInit(hwnd)) { MessageBox(nullptr, _T("Direct3D Init Failed!"), _T("D3D ERROR!"), MB_OK); return -1; } MSG msg{ 0 }; while (msg.message != WM_QUIT) { if (PeekMessage(&msg, nullptr, 0, 0, PM_REMOVE)) { TranslateMessage(&msg); DispatchMessage(&msg); } else { Direct3DRender(hwnd); } } return 0; }
int WINAPI WinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ LPSTR lpCmdLine, _In_ int nShowCmd) { WNDCLASS wndClass; wndClass.cbClsExtra = 0; wndClass.cbWndExtra = 0; wndClass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); wndClass.hCursor = LoadCursor(nullptr, IDC_ARROW); wndClass.hIcon = (HICON)LoadImage(nullptr, _T("icon.ico"), IMAGE_ICON, 0, 0, LR_LOADFROMFILE); wndClass.hInstance = hInstance; wndClass.lpfnWndProc = WndProc; wndClass.lpszClassName = CLASS_NAME; wndClass.lpszMenuName = nullptr; wndClass.style = CS_HREDRAW | CS_VREDRAW; if (!RegisterClass(&wndClass)) { return -1; } HWND hwnd = CreateWindow(CLASS_NAME, _T("WindowName"), WS_OVERLAPPEDWINDOW, 0, 0, WINDOW_WIDTH, WINDOW_HEIGHT, nullptr, nullptr, hInstance, nullptr); ShowWindow(hwnd, nShowCmd); UpdateWindow(hwnd); if (!Direct3DInit(hwnd)) { return -1; } MSG msg{ 0 }; while (msg.message != WM_QUIT) { if (PeekMessage(&msg, nullptr, 0, 0, PM_REMOVE)) { TranslateMessage(&msg); DispatchMessage(&msg); } else { Direct3DRender(hwnd); } } return 0; }
LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { switch (message) { case WM_CREATE: break; case WM_PAINT: Direct3DRender(hwnd); ValidateRect(hwnd, nullptr); break; case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(hwnd, message, wParam, lParam); } return 0; }
HRESULT WINAPI CDirect3DHook::hkEndScene(LPDIRECT3DDEVICE9 pDevice) { __asm pushad; g_pDevice = pDevice; //HRESULT cooperativeStatus = g_pDevice->TestCooperativeLevel(); //if(cooperativeStatus == D3DERR_DEVICENOTRESET) //{ // CLogFile::Printf("PreD3DReset"); // Direct3DInvalidate(); // i.e. pFont->OnLostDevice(); // bReset = true; //} //else if(cooperativeStatus == D3D_OK && bReset) //{ // CLogFile::Printf("PostD3DReset(1)"); // Direct3DReset(); // i.e. pFont->OnResetDevice(); // bReset = false; //} if(m_bInitialized == false) { HWND hFocusWindow = FindWindow(NULL,"GTAIV"); if(hFocusWindow != NULL) { SetWindowText(hFocusWindow, MOD_NAME DEBUG_IDENTIFIER); // Disable minimize & maximize box SetWindowLong(hFocusWindow, GWL_STYLE, GetWindowLong(hFocusWindow, GWL_STYLE) & ~WS_MINIMIZEBOX & ~WS_MAXIMIZEBOX); if(!m_wWndProc) { CLogFile::Printf("SubclassWindow"); m_wWndProc = SubclassWindow(hFocusWindow, WndProc_Hook); Direct3DInvalidate(); Direct3DReset(); m_bInitialized = true; } } } if(!bReset) Direct3DRender(); __asm popad; return m_pEndScene(g_pDevice); }
LRESULT CALLBACK WinMainProc(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam) { switch (msg) { case WM_PAINT: //客户区重绘 Direct3DRender();//渲染图形 ValidateRect(hWnd,NULL);//更新客户区显示 break; case WM_DESTROY://窗口销毁消息 Direct3DCleanup();//清理Direct3D PostQuitMessage(0);//退出 break; case WM_KEYDOWN: if (wParam==VK_ESCAPE)//ESC键 { DestroyWindow(hWnd);//销毁窗口,并发送一条WM_DESTROY消息 } break; } return DefWindowProc(hWnd,msg,wParam,lParam); }