VC++深入详解第一章学习笔记
来源:互联网 发布:genymotion 网络设置 编辑:程序博客网 时间:2024/05/16 19:13
铺天盖地的库函数,纠结啊加蛋疼,真的是硬着头皮开始了MFC的学习,通过VC++深入详解的第一章的学习,初步了解了WINDOWS程序内部的运行机制(其实还是晕晕的),自己试着依样画葫芦实现了一个窗口的创建,算是对VC的学习有了一个初步的印象。
要创建一个完整的窗口,并在窗口中响应键盘及鼠标消息,要进行以下的步骤。
1、WinMain函数的定义;
2、创建一个窗口;
3、进行消息循环;
4、编写窗口过程函数;
对于第一个步骤WinMain函数的定义如下:
int WINAPI WinMain( HINSTANCE hInstance, // handle to current instance HINSTANCE hPrevInstance, // handle to previous instance LPSTR lpCmdLine, // command line int nCmdShow // show state);
对于第二个步骤创建一个完整的窗口,需要经过几个操作步骤,分别是设计一个窗口类,注册一个窗口,创建窗口,显示及更新窗口。
对窗口进行设计:
WNDCLASS wndclass; wndclass.style=CS_BYTEALIGNCLIENT; wndclass.lpfnWndProc=first; wndclass.cbClsExtra=0; wndclass.cbWndExtra=0; wndclass.hInstance=hInstance; wndclass.hIcon=LoadIcon(NULL,IDI_ERROR); wndclass.hCursor=LoadCursor(NULL,IDC_HELP); wndclass.hbrBackground=(HBRUSH)GetStockObject(BLACK_BRUSH); wndclass.lpszMenuName=NULL; wndclass.lpszClassName="林的WINDOWS程序";注册窗口类:
RegisterClass(&wndclass);
创建及显示窗口:
HWND hwnd;hwnd=CreateWindow("林的WINDOWS程序","菜鸟的无奈",WS_OVERLAPPEDWINDOW,0,0,600,600,NULL,NULL,hInstance,NULL);ShowWindow(hwnd,SW_SHOWNORMAL);
第三个步骤是进行消息循环:
MSG msg;while(GetMessage(&msg,NULL,0,0)){TranslateMessage(&msg);DispatchMessage(&msg);}
第四个步骤也是WINDOWS编程中最核心的步骤是窗口过程函数的编写:
LRESULT CALLBACK first( HWND hwnd, UINT umsg, WPARAM wParam, LPARAM lParam){switch(umsg){case WM_CHAR:char str[100];sprintf(str,"1+1",0);MessageBox(hwnd,str,"菜鸟的无奈",0);break;case WM_LBUTTONDOWN:MessageBox(hwnd,"鼠标输入","菜鸟的无奈",0);HDC hdc;hdc=GetDC(hwnd);TextOut(hdc,0,50,"晕头转向",strlen("晕头转向"));break;case WM_PAINT:HDC hDC;PAINTSTRUCT ps;hDC=BeginPaint(hwnd,&ps);TextOut(hDC,0,0,"纠结啊纠结",strlen("纠结啊纠结"));EndPaint(hwnd,&ps);break;case WM_CLOSE:if(IDYES==MessageBox(hwnd,"是否真的结束?","weixin",MB_YESNO)){DestroyWindow(hwnd);}break;case WM_DESTROY:PostQuitMessage(0);break;default:return DefWindowProc(hwnd,umsg,wParam,lParam);}return 0;}
不得不说,这几段代码包含了许多的知识点,虽然写出了这些代码,但是许多的知识点与原理还需要继续领悟巩固加强,下面附上一段完整的代码,虽然只是一段很简单的代码,但是也还是花了自己很多时间,毕竟刚开始学。
#include <stdio.h>#include <windows.h>LRESULT CALLBACK first( HWND hwnd, UINT umsg, WPARAM wParam, LPARAM lParam){switch(umsg){case WM_CHAR:char str[100];sprintf(str,"1+1",0);MessageBox(hwnd,str,"菜鸟的无奈",0);break;case WM_LBUTTONDOWN:MessageBox(hwnd,"鼠标输入","菜鸟的无奈",0);HDC hdc;hdc=GetDC(hwnd);TextOut(hdc,0,50,"晕头转向",strlen("晕头转向"));break;case WM_PAINT:HDC hDC;PAINTSTRUCT ps;hDC=BeginPaint(hwnd,&ps);TextOut(hDC,0,0,"纠结啊纠结",strlen("纠结啊纠结"));EndPaint(hwnd,&ps);break;case WM_CLOSE:if(IDYES==MessageBox(hwnd,"是否真的结束?","weixin",MB_YESNO)){DestroyWindow(hwnd);}break;case WM_DESTROY:PostQuitMessage(0);break;default:return DefWindowProc(hwnd,umsg,wParam,lParam);}return 0;}int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd ){WNDCLASS wndclass; wndclass.style=CS_BYTEALIGNCLIENT;wndclass.lpfnWndProc=first; wndclass.cbClsExtra=0; wndclass.cbWndExtra=0; wndclass.hInstance=hInstance; wndclass.hIcon=LoadIcon(NULL,IDI_ERROR); wndclass.hCursor=LoadCursor(NULL,IDC_HELP); wndclass.hbrBackground=(HBRUSH)GetStockObject(BLACK_BRUSH); wndclass.lpszMenuName=NULL; wndclass.lpszClassName="林的WINDOWS程序";RegisterClass(&wndclass);HWND hwnd;hwnd=CreateWindow("林的WINDOWS程序","菜鸟的无奈",WS_OVERLAPPEDWINDOW,0,0,600,600,NULL,NULL,hInstance,NULL);ShowWindow(hwnd,SW_SHOWNORMAL);MSG msg;while(GetMessage(&msg,NULL,0,0)){TranslateMessage(&msg);DispatchMessage(&msg);}return 0;}
要学的还有很多很多,呵呵,烦恼而又乐在其中。
- VC++深入详解第一章学习笔记
- VC++深入详解第一章学习笔记
- VC++深入详解 笔记 第一章
- 《VC++深入详解》学习笔记 第一章 Windows程序内部运行机制
- VC++深入详解第一章
- VC++ 深入详解 第一章
- VC 深入详解 学习笔记
- VC++深入详解学习笔记
- VC++深入详解学习笔记
- VC++深入详解学习笔记
- VC++深入详解学习笔记
- 《VC++深入详解》学习笔记
- VC++深入详解学习笔记
- VC++深入详解学习笔记
- VC++深入详解学习笔记
- VC++深入详解学习笔记
- 《VC++深入详解》第一章练习
- vc++深入详解第一章程序
- 黑马程序员_java入门_GUI编程
- hdu1106
- Android TabActivity之感叹
- Linux网卡驱动程序
- 贴个前端代码,对元素设定透明度
- VC++深入详解第一章学习笔记
- Solr错误:sorry, no dataimport-handler defined!
- uClinux和Linux的异同
- 2-28 3-1面试
- DIV CSS布局中绝对定位和浮动用法
- MyEclipse提示键配置、提示快捷键、提示背景色、关键字颜色、代码显示
- uC/OS-II简介
- DD大牛的背包九讲
- android.os.NetworkOnMainThreadException