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;}

    要学的还有很多很多,呵呵,烦恼而又乐在其中。