• 孙鑫vc++学习(vs2008)笔记之第一课Windows程序运行原理


    <p>1.wParam、lParam附加信息,键盘按下WM_CHAR,但是并不知道按的是哪个键,需要附加信息来判断。

    2.窗口的创建:要基于创建的类名,不能随意改动

    3.redraw窗口重画:hredraw,vredraw

    4.DC:设备描述表(Device Context,DC)是一个信息结构体,包含物理输出设备及其驱动程序。在Windows平台下,所有的的图形操作都是通过它完成。

    5. if语句把常量放在前边,若为赋值编译器会报错

    6.callback:回调函数。__stdcall,delphi默认的函数返回时__stdcall,vc++默认是__cdecl。

    View Code
     1 #include <stdio.h>
    2 #include <tchar.h>
    3 #include <string.h>
    4 #include <stdlib.h>
    5 #include <afx.h>
    6
    7 LRESULT CALLBACK WinSunProc(
    8 HWND hwnd, // handle to window
    9 UINT uMsg, // message identifier
    10 WPARAM wParam,// first message parameter
    11 LPARAM lParam // second message parameter
    12 );
    13 int WINAPI WinMain(
    14 HINSTANCE hInstance, // handle to current
    15 HINSTANCE hPrevInstance,// handle to previous
    16 LPSTR lpCmdLine, // command line
    17 int nCmdShow // show state
    18 )
    19 {
    20 WNDCLASS wndcls;
    21 wndcls.cbClsExtra = 0;
    22 wndcls.cbWndExtra = 0;
    23 wndcls.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);
    24 wndcls.hCursor = LoadCursor(NULL,IDC_ARROW); //光标
    25 wndcls.hIcon = LoadIcon(NULL,IDI_APPLICATION); //图标
    26 wndcls.hInstance = hInstance;
    27 wndcls.lpfnWndProc = WinSunProc;
    28 wndcls.lpszClassName = _T("2020"); //类名
    29 wndcls.lpszMenuName = NULL;
    30 wndcls.style = CS_HREDRAW | CS_VREDRAW;
    31 RegisterClass(&wndcls);
    32
    33 HWND hwnd;
    34 hwnd = CreateWindow(_T("2020"), //类名,一定要基于创建的类创建窗口
    35 _T("相信自己!坚持!"),
    36 WS_OVERLAPPEDWINDOW ,//& ~WS_MAXIMIZEBOX //窗口模式(取消最大化按钮)
    37 CW_USEDEFAULT,CW_USEDEFAULT, //起始点
    38 600,400, //宽高
    39 NULL, //副窗口
    40 NULL,hInstance,NULL); //cw:CreateWindow
    41
    42 ShowWindow(hwnd,SW_SHOWNORMAL); //显示窗口
    43 UpdateWindow(hwnd); //刷新窗口
    44
    45 MSG msg;
    46 while (GetMessage(&msg,NULL,0,0))
    47 {
    48 TranslateMessage(&msg);
    49 DispatchMessage(&msg); //把消息传给操作系统,操作系统调用函数
    50 }
    51 return 0 ;
    52 }
    53
    54 LRESULT CALLBACK WinSunProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam )
    55 {
    56 CString szChar;
    57 switch (uMsg)
    58 {
    59 case WM_CHAR:
    60 szChar.Format(_T("char is %d"),wParam);
    61 //sprintf_s(szChar,"char is %d",wParam);
    62 MessageBox(hwnd,szChar,_T("系统提示"),0);
    63 break;
    64 case WM_LBUTTONDOWN:
    65 MessageBox(hwnd,_T("mouse clicked"),_T("系统提示"),0);
    66 HDC hdc; //画图
    67 hdc = GetDC(hwnd); //获取句柄
    68 TextOut(hdc,0,50,_T("计算机编程语言培训"),strlen("计算机编程语言培训"));
    69 ReleaseDC(hwnd,hdc); //释放内存
    70 break;
    71 case WM_PAINT: //窗口尺寸改变就会发生重绘
    72 HDC hDC;
    73 PAINTSTRUCT ps;
    74 hDC = BeginPaint(hwnd,&ps); //为指定窗口绘画做准备,只能在WM_PAINT里面使用
    75 TextOut(hDC,0,0,_T("维新培训"),strlen("维新培训"));
    76 EndPaint(hwnd,&ps); //释放内存
    77 break;
    78 case WM_CLOSE:
    79 if(IDYES == MessageBox(hwnd,_T("是否真的结束?"),_T("系统提示"),MB_YESNO)) //if语句把常量放在前边
    80 DestroyWindow(hwnd);
    81 break;
    82 case WM_DESTROY: //此时窗口已经销毁
    83 // if(IDYES == MessageBox(hwnd,_T("是否真的结束?"),_T("系统提示"),MB_YESNO))
    84 PostQuitMessage(0);
    85 break;
    86 default:
    87 return DefWindowProc(hwnd,uMsg,wParam,lParam); //缺省的窗口函数处理其他消息(必不可少)
    88 }
    89 return 0;
    90 }

    方法:新建空项目

    问题:

    1.fatal error C1189: #error : Building MFC application with /MD[d] (CRT dll version) requires MFC shared dll version. Please #define _AFXDLL or do not use /MD[d]

    解决:项目--属性--配置属性--项目默认值--mfc的使用,改为在共享DLL中使用mfc

    2.字符串要加上_T("计算机编程语言培训"),这个默认的是多字节的。。其中貌似有个char szChar[],不识别,可以用CString szChar,szChar.Format(_T("char is %d"),wParam)。CString头文件afx.h

    交流学习,大家多多指导。。

    顺便提供下视频下载地址http://dl.dbank.com/c0ak6m28j6;是个excel里面有网址

  • 相关阅读:
    git的相关命令
    vue资料链接
    自定义小程序底部菜单
    物联网开发日记四:原理图2
    物联网开发日记三:原理图1
    物联网开发日记二:设计系统结构
    物联网开发日记一:准备工作
    mybatis不使用@Param有人报错有人却不报错问题
    最简单的js包装对象、ajax请求
    java文字转拼音、首字母缩写
  • 原文地址:https://www.cnblogs.com/quantumplan/p/2348042.html
Copyright © 2020-2023  润新知