#include<windows.h>
#include<stdio.h>
LRESULT CALLBACK WinProc(// WinProc这个名字可以随便改的WindowProc
HWND hwnd, // handle to window
UINT uMsg, // message identifier
WPARAM wParam, // first message parameter
LPARAM lParam // second message parameter
);
int WINAPI WinMain(
HINSTANCE hInstance, // handle to current instance
HINSTANCE hPrevInstance, // handle to previous instance
LPSTR lpCmdLine, // pointer to command line
int nCmdShow // show state of window
)
{
//1.注册窗口类
WNDCLASS wc;
wc.cbClsExtra=0;
wc.cbWndExtra=0;
// wc.hbrBackground=::CreateSolidBrush(0X000000ff);//也可以这样写wc.hbrBackground=::CreateSolidBrush(RGB(255,0,0));
//可以用CreateSolidBrush也可以用GetStockObject
wc.hbrBackground=(HBRUSH)::GetStockObject(WHITE_BRUSH);//里面的颜色是系统默认的一些值,BLACK_BRUSH也是其中一个
wc.hCursor=::LoadCursor(NULL,IDC_ARROW);// 这里不可以用HINSTANCE hInstance, 主要是我们现在还没有做,所以就没有
wc.hIcon=::LoadIcon(NULL,IDI_HAND) ;
wc.hInstance= hInstance;
wc.lpfnWndProc=WinProc;//指向命令行的指针
wc.lpszClassName = "wuciqiu2015";
wc.lpszMenuName = NULL;//菜单名为空
wc.style = CS_HREDRAW | CS_VREDRAW |CS_DBLCLKS;//窗口在水平方向上发生变化时会发生同会
ATOM wu= ::RegisterClass(&wc);
if(0 == wu)//失败了
{
return 0;
}
//2.创建窗口类
HWND hWnd = ::CreateWindow(wc.lpszClassName,"wuciqiu first win",WS_OVERLAPPEDWINDOW,10,10,800,600,NULL,NULL,hInstance,NULL);//会发送一个WM_CREATE消息到window procedure
if(0 == hWnd) return 0;
//3.显示窗口
::ShowWindow(hWnd,SW_SHOW);
//4.更新窗口
::UpdateWindow(hWnd);
//5.消息循环
MSG msg;//这里的msg不要付初值,因为就是通过getmessage来获取信息的
while(BOOL bok = ::GetMessage(&msg,NULL,0,0))
{
// BOOL bok = ::GetMessage(&msg,NULL,0,0);//第二个参数是指当前窗口的
// if(bok == false)
//WM_QUIT == false
::DispatchMessage(&msg);
}
// MSG msg;
// return msg.wParam;
return 0;
}
LRESULT CALLBACK WinProc(// WinProc这个名字可以随便改的WindowProc
HWND hWnd, // handle to window
UINT uMsg, // message identifier
WPARAM wParam, // first message parameter
LPARAM lParam // second message parameter
)
{
switch(uMsg)
{
case WM_CLOSE:
{
::DestroyWindow(hWnd);// 它运行完将发送WM_DESTROY信息
// ::SendMessage(hWnd,WM_QUIT,0,0);//思路是对的,要向信息队列里面发送信息,但是不能这样发对于WM_QUIT
// ::PostQuitMessage(0);//而是用它来退出,也可以用 case WM_DESTROY:来完成退出
}
break;
case WM_DESTROY:
{
::PostQuitMessage(0);
}
break;
case WM_KEYDOWN:
{
char szMsg[10]={0};
sprintf(szMsg,"%c",wParam);//字符串格式化
HDC hdc = GetDC(hWnd);//写字绘图的三步曲
::TextOut(hdc,10,10,szMsg,strlen(szMsg));
::ReleaseDC(hWnd,hdc);
}
break;
case WM_LBUTTONDOWN://左键
{
HDC hdc= GetDC(hWnd);
//现在就是要找到x,y的坐标
//MSG msg;
//msg.wParam = UK_SHIFT
//msg.lParam = MAKELONG(X,Y)
char szMsg[] = {"1024,768"};
sprintf(szMsg,"%d %d",LOWORD(lParam),HIWORD(lParam));
::TextOut(hdc,LOWORD(lParam),HIWORD(lParam),szMsg,strlen(szMsg));
::ReleaseDC(hWnd,hdc);
}
break;
case WM_RBUTTONDOWN://右键,出现时间
{
HDC hdc= GetDC(hWnd);
char szMsg[] = {"44:33:45"};
SYSTEMTIME tm;
::GetLocalTime(&tm);
sprintf(szMsg,"%02d:%.2d:%.2d",tm.wHour,tm.wMinute,tm.wSecond);
::TextOut(hdc,LOWORD(lParam),HIWORD(lParam),szMsg,strlen(szMsg));
::ReleaseDC(hWnd,hdc);
}
break;
default:
return ::DefWindowProc(hWnd,uMsg,wParam,lParam);
}
return 0;
}
MFC第一个窗口,写,右键时间,左键坐标
最新推荐文章于 2021-08-05 10:12:46 发布