最近由于兴趣爱好,学习了孙鑫的MFC教程的第一课。看完视频了,自己便用visual studio 2010尝试了MFC编程,其中遇到了一些问题。

1.vs2010不像vs6.0那样可以新建一个空的MFC应用程序,如果用vs2010 文件-新建-MFC应用程序-完成,所得到的MFC项目并不是空项目。vs2010为它提供了一些默认的模板吧(不清楚)。由于没有看懂默认提供的代码,解决的办法不是新建一个MFC应用程序,而是新建一个空项目(文件-新建-空项目),然后再在源文件夹下新建一个c++源文件,添加以下代码:

#include <Windows.h>
#include <stdio.h> LRESULT CALLBACK WinSunProc(
HWND hand,
UINT uMsg,
WPARAM wParam,
LPARAM lParam
); int WINAPI WinMain(
HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nShowCmd
)
{
WNDCLASS wndcls;
wndcls.cbClsExtra = ;
wndcls.cbWndExtra = ;
wndcls.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
wndcls.hCursor = LoadCursor(NULL,IDC_CROSS);
wndcls.hIcon = LoadIcon(NULL,IDI_ERROR);
wndcls.hInstance = hInstance;
wndcls.lpfnWndProc = WinSunProc;
wndcls.lpszClassName = "ky2014";
wndcls.lpszMenuName = NULL;
wndcls.style = CS_HREDRAW | CS_VREDRAW; RegisterClass(&wndcls); HWND hand;
hand = CreateWindow("ky2014","ky2014",WS_OVERLAPPEDWINDOW,,,,,NULL,NULL,hInstance,NULL); ShowWindow(hand,SW_SHOWNORMAL);
UpdateWindow(hand); MSG msg;
while(GetMessage(&msg,NULL,,)){
TranslateMessage(&msg);
DispatchMessage(&msg);
} return ;
} LRESULT CALLBACK WinSunProc(
HWND hand,
UINT uMsg,
WPARAM wParam,
LPARAM lParam
)
{
switch(uMsg){
case WM_CHAR:
char szChar[];
sprintf(szChar,"char is %d",wParam);
MessageBox(hand,szChar,"ky",);
break;
case WM_LBUTTONDOWN:
MessageBox(hand,"mouse clicked","ky",);
HDC hdc;
hdc = GetDC(hand);
TextOut(hdc,,,"计算机",strlen("计算机"));
ReleaseDC(hand,hdc);
break;
case WM_PAINT:
HDC hdc2;
PAINTSTRUCT ps;
hdc2 = BeginPaint(hand,&ps);
TextOut(hdc2,,,"数学",strlen("数学"));
EndPaint(hand,&ps);
break;
case WM_CLOSE:
if(IDYES == MessageBox(hand,"是否真的结束?","ky",MB_YESNO));{
DestroyWindow(hand);
}
break;
case WM_DESTROY:
PostQuitMessage();
break;
default:
return DefWindowProc(hand,uMsg,wParam,lParam);
}
return ;
}

再进行调试运行,最后的结果如下:

总结:

1.要有个MSDN的Library来查看WindowAPI.

2.遇到一个错误就是对于lpszClassName 是LPCWSTR类型,再查看LPCWSTR类型的定义,它是一个指向const wchar_t的指针。就产生了一个const char*类型无法转换为LPCWSTR类型的错误。原因好像是Unicode编码和ansi编码的问题。可以按这个博客的方法修改http://blog.163.com/liyani_1980/blog/static/38604145200921692710146/,也可以修改项目-属性-通用配置-常规-项目默认值-字符集,把"使用Unicode字符集"修改为“未设置”.

3.是关于代码风格的问题,现在可以利用typedef来包装c++中的常规类型,使得一看变量的类型就知道它所代表的含义。备忘typedef的一个用法。

参考:http://baike.baidu.com/link?url=a1p8FtKjaXTSxbcP6qiWPGcXUaTzYnftDDNt2t54eW3lLZMWikcHmDqGKiSAwBPgkfxJ2ugI-KTqSZmQuUMw9_

MFC学习-第一课 MFC运行机制的更多相关文章

  1. Magento学习第一课——目录结构介绍

    Magento学习第一课--目录结构介绍 一.Magento为何强大 Magento是在Zend框架基础上建立起来的,这点保证了代码的安全性及稳定性.选择Zend的原因有很多,但是最基本的是因为zen ...

  2. MFC原理第一讲.MFC的本质.以及手工编写MFC的程序

    MFC原理第一讲.MFC的本质.以及手工编写MFC的程序 PS: 这个博客属于复习知识.从头开始讲解. 在写这篇博客之前.已经写了3篇MFC的本质了.不过掌握知识点太多.所以从简重新开始. 一丶MFC ...

  3. Elasticsearch7.X 入门学习第一课笔记----基本概念

    原文:Elasticsearch7.X 入门学习第一课笔记----基本概念 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https: ...

  4. python学习第一课

    第一课: 1.不要使用来路不明的软件 2.下载杀毒软件 3.不懂技术的人在技术人面前会显得愈发无知 4.python无所不能 需要掌握的知识: 1.python基本语法 2.文件处理 3.函数 4.模 ...

  5. python学习第一课要点记录

    写在要点之前的一段话,留给将来的自己:第一次参加编程的培训班,很兴奋很激动,之前都是自己在网上找免费的视频来看,然后跟着写一些课程中的代码,都是照着模子写,没有自己过多的思考.感觉这样学不好,除了多写 ...

  6. MFC学习(四) 消息机制

    1 消息机制的要点: 消息队列:先进先出 消息循环:通过循环while,不断的从消息队列中取得队首消息,并分发消息. 消息处理:根据不同的消息类型做不同的处理 事件:事件响应函数 2 消息机制 _tW ...

  7. Kotlin学习第一课:从对比Java开始

    1. 介绍 今年初,甲骨文再次对谷歌所谓的安卓侵权使用Java提起诉讼,要求后者赔偿高达90亿美元.随后便传出谷歌因此计划将主力语言切换到苹果主导的Swift,不过这事后来没了跟进. 但谷歌在这两天的 ...

  8. Es学习第一课,了解基本功能和概念

    Elasticsearch作为这几年最流行的搜索引擎,越来越多的互联网企业都在采用它:作为java开发者来说,如果想进一步提高自己能力,同时也为了能够在实际工作中遇到搜索.存储问题多一个解决方案,学习 ...

  9. shell脚本学习第一课

    shell是一种程序设计语言,是访问操作系统内核的服务. Linux的shell种类常见的有: Bourne Shell(/usr/bin/sh或/bin/sh) Bourne Again Shell ...

随机推荐

  1. Quartz.NET 入门

    概述 Quartz.NET是一个开源的作业调度框架,非常适合在平时的工作中,定时轮询数据库同步,定时邮件通知,定时处理数据等. Quartz.NET允许开发人员根据时间间隔(或天)来调度作业.它实现了 ...

  2. RabbitMQ官方中文入门教程(PHP版) 第三部分:发布/订阅(Publish/Subscribe)

    发布/订阅 在上篇教程中,我们搭建了一个工作队列.每个任务之分发给一个工作者(worker).在本篇教程中,我们要做的之前完全不一样——分发一个消息给多个消费者(consumers).这种模式被称为“ ...

  3. Java开发利器Myeclipse全面详解

    Java开发利器Myeclipse全面详解: Ctrl+1:修改代码错误 Alt+Shift+S:Source命令 Ctrl+7:单行注释 Ctrl+Shift+/ :多行注释 Ctrl+I :缩进( ...

  4. 【UR #2】树上GCD

    这道题是有根树点分治+烧脑的容斥+神奇的分块 因为是规定1为根,还要求LCA,所以我们不能像在无根树上那样随便浪了,必须规定父亲,并作特殊讨论 因为gcd并不好求,所以我们用容斥转化一下,求x为gcd ...

  5. bzoj3224

    学习了下treap #include<iostream> #include<cstdio> #include<cstdlib> using namespace st ...

  6. jsoup-提示java.net.SocketTimeoutException:Read timed out

    使用Jsoup.connect(url).get()连接某网站时偶尔会出现 java.net.SocketTimeoutException:Read timed out异常. 原因是默认的Socket ...

  7. ON DUPLICATE KEY UPDATE

    如果在INSERT语句末尾指定了ON DUPLICATE KEY UPDATE,并且插入行后会导致在一个UNIQUE索引或PRIMARY KEY中出现重复值,则在出现重复值的行执行UPDATE: 如果 ...

  8. Casually have a look

    1. 用红盘子吃饭能助你减肥.教授告诉我们:“红色是一种原始的危险信号,它同时也会使盘中的食物看上去不那么诱人,所以你也会吃得更少.” 2. 要减肥请关电视.教授说:“如果你需要减肥,请在吃饭时把电视 ...

  9. 77.Android之代码混淆

    转载:http://www.jianshu.com/p/7436a1a32891 简介 作为Android开发者,如果你不想开源你的应用,那么在应用发布前,就需要对代码进行混淆处理,从而让我们代码即使 ...

  10. dpm-release3.1在windows下的配置

    dpm-release3.1在windows下的配置 dpm是做目标检测objecjt detection的经典方法.dpm系列代码默认是在linux和mac下运行测试过的,windows下默认是不能 ...