最简单的Windows窗口程序,使用main函数,隐藏控制台等,适合window编程入门

来源:互联网 发布:centos 6删除防火墙 编辑:程序博客网 时间:2024/06/06 06:59
#include <Windows.h>#pragma comment( linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"" ) //隐藏控制台用,注掉后控制台和窗口一起出现LRESULT WINAPI WndProc(HWND,UINT,WPARAM,LPARAM);int main(){HINSTANCE hInstance = GetModuleHandle(NULL);//获取实例句柄WNDCLASSEX wc;MSG msg;HWND hwnd;//填充窗口属性wc.cbSize = sizeof(WNDCLASSEX);wc.style = CS_HREDRAW | CS_VREDRAW;wc.lpfnWndProc = WndProc;wc.cbClsExtra = wc.cbWndExtra = NULL;wc.hInstance = hInstance;wc.hbrBackground = (HBRUSH)GetStockObject(COLOR_WINDOW+1);wc.lpszMenuName = NULL;wc.lpszClassName = TEXT("MyWindow");wc.hIcon = wc.hIconSm = LoadIcon(NULL,IDI_APPLICATION); wc.hCursor = LoadCursor(NULL,IDC_ARROW); RegisterClassEx(&wc);//注册窗口类hwnd = CreateWindowEx(NULL,wc.lpszClassName,wc.lpszClassName,WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,hInstance,NULL );//创建窗口ShowWindow(hwnd, SW_SHOW);//显示窗口UpdateWindow(hwnd);//更新窗口
//进入消息循环while(true){if(!GetMessage(&msg,0,0,0))break;TranslateMessage(&msg);DispatchMessage(&msg);}return 0;}//窗口过程回调函数,在这里处理窗口消息LRESULT WINAPI WndProc( HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam){switch(uMsg){case WM_DESTROY:PostQuitMessage(NULL);break;}return DefWindowProc(hWnd, uMsg, wParam, lParam);}

vs2008 下面编译通过


比起自动创建的window窗口精简不少,而且是用新手熟悉的main函数。虽然是这么说,但是要理解这里面的过程,果然还是要看看windows编程相关基础才行。想我以前就是不理解什么叫回调,为什么窗口过程会“自己执行了”,感觉不按程序的套路来,呵呵。

其实什么回调不回调,不过是函数指针的知识罢了,注册的时候就把函数指针给了一个结构体,窗口程序在接受到窗口消息后调用了这个函数指针而已,没什么特别的,只是它是在windows内部完成的,看不到而已,如果自己写过DLL就会理解多一点。

原创粉丝点击