VC++学习笔记1

声明:此为小白学习VC++的学习笔记,因没能在CSDN当中找到相应的私密博客权限,如果有人看到这些文字,请忽略!谢谢!

int 、dword 、wParam 、long 在VC++6.0当中都是4个字节,内存结构一致,在今后的数据类型当中,只要是数值(没有short定义)都可以相互转换,并不影响程序运行!
再者 MessageBox(hwnd,"text","title",type)中"text"传进去的是常量字符串指针,他们的内存模型不一样,传入的是指针,还是内部重载了参数?
createWindow创建的窗口名应与类名相同,不然出错。
在VC++调试过程中,中止了程序,但是进程并没有退出,主要是动态链接库的版本太旧,需要更新DM.DLL 与 TLLOC.DLL版本,更新到新版本就对了。
在调试过程中出现错误也是这个原因,出现以下信息:

Loaded ‘C:\Windows\SysWOW64\winmm.dll’, no matching symbolic information found.
Loaded ‘C:\Windows\SysWOW64\msvcrt.dll’, no matching symbolic information found.
Loaded ‘C:\Windows\SysWOW64\user32.dll’, no matching symbolic information found.
Loaded ‘C:\Windows\SysWOW64\gdi32.dll’, no matching symbolic information found.

这些DLL不是DEBUG版本,没有DEBUG信息,因此会出现调试错误,但不影响程序运行。

首先,创建窗口过程的基本步骤为创建定义窗口类、注册窗口类、显示窗口类与更新窗口类。(更新窗口类并没有细究其中的作用与含义,仅知道这是窗口程序的一部分)
窗口编程难点在于其消息机制,使用MICROSOFT APPLICATION工程建立窗口工程还较容易理解。在程序中定义了窗口过程函数,首先通过GETMESSAGE()函数得到在进程执行过程中外部输入的消息(在消息队列中取出?然后再给发给系统,系统再调用窗口过程函数?),然后通过TranslateMessage()与DispatchMessage()将然后再给发给系统,系统再调用窗口过程函数?不管怎么样,Windows消息机制最后由应用程序的窗口过程函数进行处理。在MFC编程中系统把基本过程函数都封装在底层,看不到基本的过程函数,把过程函数映射到FRAME 、 View 、Document类的消息响应函数当中,这是难点。
在msdn中建议不要使用下列粗体写法,因为GETMESSAGE()返回-1时为获取消息失败,因此要对-1进行处理,但我没能找到失败方法。在窗口函数受到DestroyWindows 后发送PostQuit消息,主要是让主线程WHILE退出,可以利用msg.message退出while循环。如下代码所示。

MSG msg;
msg.message =1;
while(msg.message)
//while(GetMessage(&msg ,NULL , 0 ,0 ))
{
switch(GetMessage(&msg ,NULL , 0 ,0 ))
{case -1 :MessageBox(hwnd,”There is an error” , “warning!”,MB_OK);break;
case 1 :TranslateMessage(&msg);DispatchMessage(&msg);break;
case 0 :msg.message=0;break;
default : break;
}
//MessageBox(hwnd , itoa(msg.time , mytime ,10) , “发送消息的时间”,MB_OK);
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
双缓冲技术可以有效地提高绘图的效率和质量,尤其是在需要频繁更新图像或实现动画效果的情况下。下面介绍一下在 VC++ 中如何使用双缓冲技术绘制图片。 1. 创建位图对象 首先,我们需要创建一个位图对象,用于存储要绘制的图片。可以使用 LoadImage 函数从文件中加载一个位图,也可以使用 CreateBitmap 函数创建一个空的位图对象,然后使用 SetPixel 或者 BitBlt 等函数将图像数据写入到位图中。 2. 创建内存 DC 接下来,我们需要创建一个内存 DC(Device Context)对象,用于在内存中绘制图像。可以使用 CreateCompatibleDC 函数创建一个与屏幕兼容的内存 DC 对象。 3. 将位图对象选入内存 DC 将创建的位图对象选入内存 DC 中,以便在内存中进行绘制操作。可以使用 SelectObject 函数将位图对象选入内存 DC。 4. 绘制图像 在内存 DC 中使用 GDI 函数绘制图像,例如使用 DrawImage 或者 BitBlt 函数将图像从源 DC 复制到内存 DC 中。 5. 将内存 DC 中的图像绘制到屏幕 最后,使用 BitBlt 函数将内存 DC 中的图像绘制到屏幕上,将内存中的图像复制到屏幕 DC 中。 下面是一个简单的示例代码: ``` // 加载位图 HBITMAP hBitmap = LoadImage(NULL, _T("test.bmp"), IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE); // 创建内存 DC HDC hMemDC = CreateCompatibleDC(NULL); // 将位图选入内存 DC HBITMAP hOldBitmap = (HBITMAP)SelectObject(hMemDC, hBitmap); // 在内存 DC 中绘制图像 // ... // 将内存 DC 中的图像绘制到屏幕上 HDC hDC = GetDC(hWnd); BitBlt(hDC, 0, 0, cx, cy, hMemDC, 0, 0, SRCCOPY); ReleaseDC(hWnd, hDC); // 释放资源 SelectObject(hMemDC, hOldBitmap); DeleteDC(hMemDC); DeleteObject(hBitmap); ``` 其中,hWnd 是窗口的句柄,cx 和 cy 分别是窗口的宽度和高度。需要注意的是,如果使用了双缓冲技术,就不要直接在窗口 DC 上绘制图像,而是应该在内存 DC 中进行操作,最后再将图像绘制到屏幕上。这样可以避免闪烁和卡顿等问题,提高绘图的效率和质量。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值