标签:
// 6WinRes.cpp : 定义应用程序的入口点。//#include "stdafx.h"#include "6WinRes.h"#include "Resource.h"#include <iostream>#define PrintLog(x) WriteConsole(g_hStdout, x, strlen(x), NULL, NULL)HINSTANCE g_hInst = NULL; //窗口句柄HANDLE g_hStdout = NULL; //控制台句柄CHAR szText[256] = { 0 };BOOL OnSetCursor(HWND hWnd, UINT nMsg, WPARAM wParam, LPARAM lParam){//如果鼠标是在系统标题栏上,就返回FALSEint nHitTest = LOWORD(wParam);if (HTCLIENT != nHitTest){//不在客户区,返回False//让DefWindowProc处理return FALSE;}//获得窗口的客户区RECT rcCilent = { 0 };GetClientRect(hWnd, &rcCilent);//获得当前光标的位置POINT ptPos = { 0 };GetCursorPos(&ptPos); //获得光标坐标ScreenToClient(hWnd, &ptPos); //获得客户区坐标//根据位置设置光标HCURSOR hCursor = NULL;if (ptPos.x < rcCilent.left / 2){if (ptPos.y < rcCilent.bottom / 2){hCursor = LoadCursor(NULL, IDC_SIZEALL);}else{hCursor = LoadCursor(NULL, IDC_CROSS);}}else{if (ptPos.y < rcCilent.bottom / 2){hCursor = LoadCursor(NULL, IDC_WAIT);}else{hCursor = LoadCursor(NULL, IDC_UPARROW);}}//设置光标SetCursor(hCursor);return TRUE;}void OnCommand(HWND hWnd, UINT nMsg, WPARAM wParam, LPARAM lParam){int nCmdID = LOWORD(wParam);switch (nCmdID){case ID_EXIT:PrintLog("ID_EXIT 触发\n");break;case ID_OPEN:PrintLog("ID_OPEN 触发\n");break;case ID_HELP:PrintLog("ID_HELP 触发\n");break;case ID_ABOUT:PrintLog("ID_ABOUT 触发\n");break;case ID_REGISTER:PrintLog("ID_REGISTER 触发\n");break;}//语法习惯//unsigned int nCmdID;//DWORD dwCmdID;//WORD wCmdId;//可以直接用 nCmdID 定义,代表数字}LRESULT CALLBACK WndProc(HWND hWnd, UINT nMsg, WPARAM wParam, LPARAM lParam){switch (nMsg){case WM_SETCURSOR:if (TRUE == OnSetCursor(hWnd, nMsg, wParam, lParam)){return 0;}//OnSetCursor(hWnd, nMsg, wParam, lParam); //VS2013直接用这句也可解决break;case WM_COMMAND:OnCommand(hWnd, nMsg, wParam, lParam);break;case WM_DESTROY:PostQuitMessage(0);break;}return DefWindowProc(hWnd, nMsg, wParam, lParam);}BOOL RegisterWnd(LPSTR pszClassName){WNDCLASSEX wce = { 0 };wce.cbSize = sizeof(wce);wce.cbClsExtra = 0;wce.cbWndExtra = 0;wce.hbrBackground = HBRUSH(COLOR_BTNFACE + 1);wce.hCursor = LoadCursor(NULL, MAKEINTRESOURCE(IDC_CURSOR1));wce.hIcon = LoadIcon(g_hInst, MAKEINTRESOURCE(IDI_ICON3));wce.hIconSm = NULL;wce.hInstance = g_hInst;wce.lpfnWndProc = WndProc;wce.lpszClassName = pszClassName;wce.lpszMenuName = NULL;wce.style = CS_HREDRAW | CS_VREDRAW;ATOM atom = RegisterClassEx(&wce);if (atom == NULL){return FALSE;}else{return TRUE;}}HWND CreateWnd(LPSTR pszClassName){//加载字符串资源CHAR szTextCreate[256] = { 0 };LoadString(g_hInst, IDS_MAIN, szTextCreate, 256);//加载菜单HMENU hMainMenu = LoadMenu(g_hInst, MAKEINTRESOURCE(IDR_MENU1));//加载完之后要放在窗口上,放到CreateWindow函数里的倒数第三个就成HWND hWnd = CreateWindowEx(0, pszClassName, szTextCreate, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,CW_USEDEFAULT, NULL, hMainMenu, g_hInst, 0);return hWnd;}void ShowWnd(HWND hWnd){ShowWindow(hWnd, SW_SHOW);UpdateWindow(hWnd);}void Msg(HWND hWnd){//加载加速键,按X键触发退出消息HACCEL hAccel = LoadAccelerators(g_hInst, MAKEINTRESOURCE(IDR_ACCELERATOR1));//消息循环MSG msg = { 0 };while (GetMessage(&msg, NULL, 0, 0)){ //增加加速键的消息处理if (!TranslateAccelerator(hWnd, hAccel, &msg)) //加速键,如果不返回零,则以前的消息 就不执行了{ //正常消息处理//字符串消息处理TranslateMessage(&msg);//消息派发DispatchMessage(&msg);}}}void ConsoleWnd(){AllocConsole();g_hStdout = GetStdHandle(STD_OUTPUT_HANDLE);CHAR szText[] = "Debug start:\n";WriteConsole(g_hStdout, szText, strlen(szText), NULL, NULL);}int WINAPI WinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ LPSTR lpCmdLine, _In_ int nShowCmd){g_hInst = hInstance;ConsoleWnd();RegisterWnd("oooo");HWND hWnd = CreateWnd("oooo");ShowWnd(hWnd);Msg(hWnd); //加速键处理return 0;}
标签:
原文地址:http://www.cnblogs.com/nfking/p/5573163.html