main可以干WinMain干的所有事,下面就用所谓的控制台方法创建窗口程序,不信你看
// Console.cpp : 定义控制台应用程序的入口点。
//
#include <windows.h>
#include <stdio.h>
HWND g_hConBtn;
LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
static HWND hWndBtn_1, hWndBtn_2, hWndBtn_3, hWndBtn_4, hWndBtn_5;
static HWND hMainWnd,hConWnd;
RECT rect;
static BOOL bFlag = FALSE;
switch (message)
{
case WM_CREATE:
hMainWnd = hwnd;
hWndBtn_1 = CreateWindow("button", "把它拽过来", WS_CHILD | WS_VISIBLE, 150, 200, 80, 40, hwnd, (HMENU)1, ((LPCREATESTRUCT)lParam)->hInstance, NULL);
hWndBtn_2 = CreateWindow("button", "↑", WS_CHILD | WS_VISIBLE, 150, 40, 40, 30, hwnd, (HMENU)2, ((LPCREATESTRUCT)lParam)->hInstance, NULL);
hWndBtn_3 = CreateWindow("button", ">>", WS_CHILD | WS_VISIBLE, 200, 80, 40, 30, hwnd, (HMENU)3, ((LPCREATESTRUCT)lParam)->hInstance, NULL);
hWndBtn_4 = CreateWindow("button", "↓", WS_CHILD | WS_VISIBLE, 150, 120, 40, 30, hwnd, (HMENU)4, ((LPCREATESTRUCT)lParam)->hInstance, NULL);
hWndBtn_5 = CreateWindow("button", "<<", WS_CHILD | WS_VISIBLE, 100, 80, 40, 30, hwnd, (HMENU)5, ((LPCREATESTRUCT)lParam)->hInstance, NULL);
return 0;
case WM_COMMAND:
switch (LOWORD(wParam))
{
case 1:
if(!bFlag)
{
MessageBox(NULL, "见证奇迹", "", 0);
hConWnd = SetParent(g_hConBtn, hMainWnd);
SetWindowText(g_hConBtn, "见或不见");
bFlag = TRUE;
}
else
{
MessageBox(NULL, "奇迹已经见证过了", "", 0);
}
break;
case 2:
if(!hConWnd)
{
MessageBox(NULL, "你要先拽一下", "", 0);
}
else
{
GetWindowRect(hConWnd, &rect);
MoveWindow(hConWnd, rect.left, rect.top - 20, rect.right - rect.left, rect.bottom - rect.top, TRUE);
}
break;
case 3:
if (!hConWnd)
{
MessageBox(NULL, "你要先拽一下", "", 0);
}
else
{
GetWindowRect(hConWnd, &rect);
MoveWindow(hConWnd, rect.left + 20, rect.top, rect.right - rect.left, rect.bottom - rect.top, TRUE);
}
break;
case 4:
if (!hConWnd)
{
MessageBox(NULL, "你要先拽一下", "", 0);
}
else
{
GetWindowRect(hConWnd, &rect);
MoveWindow(hConWnd, rect.left, rect.top + 20, rect.right - rect.left, rect.bottom - rect.top, TRUE);
}
break;
case 5:
if (!hConWnd)
{
MessageBox(NULL, "你要先拽一下", "", 0);
}
else
{
GetWindowRect(hConWnd, &rect);
MoveWindow(hConWnd, rect.left - 20, rect.top, rect.right - rect.left, rect.bottom - rect.top, TRUE);
}
break;
case 6:
if (ShowWindow(hConWnd, SW_HIDE))
{
}
else
{
ShowWindow(hConWnd, SW_NORMAL);
}
break;
default:
break;
}
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hwnd, message, wParam, lParam);
}
int main()
{
HWND hConWnd = GetConsoleWindow();
HDC hConDC = GetDC(hConWnd);
HPEN hConPen = CreatePen(PS_SOLID, 5, RGB(255, 100, 100));
HBRUSH hConBrush = CreateSolidBrush(RGB(50, 200, 100));
HPEN hOldPen = (HPEN)SelectObject(hConDC, hConPen);
HBRUSH hOldBrush = (HBRUSH)SelectObject(hConDC, hConBrush);
Rectangle(hConDC, 210, 200, 450, 380);
TextOut(hConDC, 250, 250, "C++技术网",9);
TextOut(hConDC, 250, 300, "试试键盘的上下左右键", 20);
TextOut(hConDC, 250, 350, "欢迎大家前来学习交流", 20);
HINSTANCE hConInstance = (HINSTANCE)GetWindowLong(hConWnd, GWL_HINSTANCE);
HWND hConBtn = CreateWindow("button", "控制台按钮", WS_CHILD | WS_VISIBLE, 280, 20, 80, 40, hConWnd, (HMENU)6, hConInstance, NULL);
g_hConBtn = hConBtn;
HWND hConEdit = CreateWindow("edit", "在控制台窗口中键盘\r\n上下左右键可以控制右边窗口", WS_CHILD | WS_VISIBLE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_MULTILINE | ES_LEFT | WS_HSCROLL | WS_VSCROLL, 10, 20, 240, 160, hConWnd, 0, hConInstance, NULL);
MoveToEx(hConDC, 400, 10, NULL);
LineTo(hConDC, 600, 200);
INPUT_RECORD irBuf[128] = { 0 };
HANDLE hStdHandle = GetStdHandle(STD_INPUT_HANDLE);
DWORD dwMode = 0, dwNumOfEventRead=0;
GetConsoleMode(hStdHandle, &dwMode);
dwMode |= ENABLE_WINDOW_INPUT | ENABLE_MOUSE_INPUT;
SetConsoleMode(hStdHandle, dwMode);
static TCHAR szAppName[] = TEXT("ConsoleClass");
HWND hwnd;
MSG msg;
WNDCLASS wndclass;
wndclass.style = CS_HREDRAW | CS_VREDRAW;
wndclass.lpfnWndProc = WndProc;
wndclass.cbClsExtra = 0;
wndclass.cbWndExtra = 0;
wndclass.hInstance = hConInstance;
wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wndclass.hCursor = LoadCursor(hConInstance, MAKEINTRESOURCE(IDC_ARROW));//LoadCursor (NULL, IDC_ARROW) ;
wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
wndclass.lpszMenuName = NULL;
wndclass.lpszClassName = szAppName;
RegisterClass(&wndclass);
hwnd = CreateWindow(szAppName, // window class name
TEXT("Hello C++技术网"), // window caption
WS_OVERLAPPEDWINDOW, // window style
800, // initial x position
50, // initial y position
400, // initial x size
400, // initial y size
NULL, // parent window handle
NULL, // window menu handle
hConInstance, // program instance handle
NULL); // creation parameters
RECT rect;
char ch = 0, buf[128] = { 0 };
GetWindowRect(hConWnd, &rect);
MoveWindow(hwnd, rect.right, rect.top, 400, 400, TRUE);
ShowWindow(hwnd, SW_NORMAL);
UpdateWindow(hwnd);
while (1)
{
if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
else
{
PeekConsoleInput(hStdHandle, irBuf, 128, &dwNumOfEventRead);
FlushConsoleInputBuffer(hStdHandle);
for (int i = 0; i < dwNumOfEventRead; i++)
{
switch (irBuf[i].EventType)
{
case MOUSE_EVENT:
memset(buf, 0, 128 * sizeof(char));
sprintf_s(buf, "拿走鼠标有惊喜\r\n鼠标位置 Line_X:%d Line_Y:%d", irBuf[i].Event.MouseEvent.dwMousePosition.X, irBuf[i].Event.MouseEvent.dwMousePosition.Y);
SendMessage(hConEdit, WM_SETTEXT, 0, (LPARAM)buf);
break;
case KEY_EVENT:
GetWindowRect(hwnd, &rect);
memset(buf, 0, 128 * sizeof(char));
sprintf_s(buf, "左:%u 上:%u \r\n右:%u 下:%u", rect.left, rect.top, rect.right, rect.bottom);
SendMessage(hConEdit, WM_SETTEXT, 0, (LPARAM)buf);
ch = irBuf[i].Event.KeyEvent.wVirtualKeyCode;
switch (ch)
{
case VK_LEFT:
MoveWindow(hwnd, rect.left - 20, rect.top, rect.right - rect.left, rect.bottom - rect.top, TRUE);
break;
case VK_RIGHT:
MoveWindow(hwnd, rect.left + 20, rect.top, rect.right - rect.left, rect.bottom - rect.top, TRUE);
break;
case VK_UP:
MoveWindow(hwnd, rect.left, rect.top - 20, rect.right - rect.left, rect.bottom - rect.top, TRUE);
break;
case VK_DOWN:
MoveWindow(hwnd, rect.left, rect.top + 20, rect.right - rect.left, rect.bottom - rect.top, TRUE);
break;
default:
break;
}
break;
default:
break;
}
}
}
}
SelectObject(hConDC, hOldPen);
SelectObject(hConDC, hOldBrush);
DeleteObject(hConPen);
DeleteObject(hConBrush);
ReleaseDC(hConWnd, hConDC);
return msg.wParam;
}
看,先给出源代码,具体下次讲解