标签: visual-c++

从CImageList中获取CBitmap

我在一个函数中的CImageList中插入了位图,并且需要在另一个函数中稍后更改一些图像.但我无法提取CBitmap.代码如下:

CBitmap GetIndividualBitmap(CImageList oImgList, int nBmpNo)
{   
    IMAGEINFO imgInfo;
    imagelist.GetImageInfo(index,imgInfo);
    CBitmap bmp;
    bmp.FromHandle(imgInfo.hbmImage);
    return bmp;
}
Run Code Online (Sandbox Code Playgroud)

但是我得到的只是黑屏.谁能指出我哪里出错了?

mfc visual-c++

0
推荐指数
1
解决办法
3229
查看次数

如何在不更改的情况下检索当前的terminate()处理程序?

这是问题所在.我的应用程序调用CoCreateInstance()创建在第三方DLL中实现的COM对象.该DLL调用set_terminate()更改terminate()处理程序并在其中传递其自己的terminate()处理程序的地址.

初始terminate()处理程序地址不会被该库保存 - 它不关心并只是更改处理程序而永远不会恢复它.一旦DLL被卸载,其代码就不再在进程内存中,因此如果现在terminate()被调用,程序将运行到未定义的行为.

我想检索并存储初始terminate()处理程序的地址,以便能够恢复它.我该怎么做?

c++ error-handling terminate visual-c++

0
推荐指数
1
解决办法
147
查看次数

指针与引用与常规传递值c ++

请在回答之前阅读.我不希望你为我说明显的事.感谢:D

我试图区分指针和传递值.而且我认为我理解它们,但我读到的一个来源并不清楚,传递指针和传递值之间的区别是什么.考虑以下...

andy = 25;
fred = andy;
ted = &andy; 
Run Code Online (Sandbox Code Playgroud)

第一行将值25传递给andy.第二行将andy的值传递给fred.现在fred拥有值25.第三行传递给ted.现在ted保存了andy的内存地址,其值为25.现在看看下一个代码

andy = 25;
fred = andy;
ted = &andy; 
joe = *andy;
Run Code Online (Sandbox Code Playgroud)

上面的代码看起来就像第一个代码段,除了我们将指向andy的指针传递给了joe.现在,joe保持指针值为25.这几乎和刚刚做的一样(joe = andy).没有*

传递指针值与传递值相比有什么不同?

在我的解释中,似乎joe的指针值仍然受影响,如果后来我决定改变andy /的值,如果我只是通过值,它不会影响.Ť

据我所知,传递引用和传递指针之间的唯一区别是,一个保存地址,另一个保存该地址内的值.如果任何拥有该值引用的变量,它仍然会改变,决定改变它.如果是这种情况,通过引用传递和传递值的意义是什么.

这是我正在阅读的内容的链接

http://www.cplusplus.com/doc/tutorial/pointers/

多谢你们!!!

c visual-studio-2008 visual-studio visual-c++

0
推荐指数
1
解决办法
1381
查看次数

如何进行虚拟化?

我是vc ++的新手.我已经使用WDK,DDK和Visual Studio 2008配置了我的系统.我想为我的无线硬件实现双重功能,我正在使用Vista,所以请从这里帮助我.所以告诉我应该使用哪个功能

提前致谢... :)

c++ windows wireless visual-c++

0
推荐指数
1
解决办法
1483
查看次数

帮助更正确地重新构建我的Doc/View

由OP编辑.
我的计划需要进行大量的清理和重组.

在另一篇文章中,我询问了如何离开MFC DocView框架并转向WinProc和Message Loop方式(简称为什么?).那么目前我在想我应该清理Doc View中的内容,也许以后转换为非MFC甚至是有意义的.我的Document类目前几乎没有任何用处.

我认为一个开始的地方是InitInstance()函数(发布在下面).
在这部分:

POSITION pos=pDocTemplate->GetFirstDocPosition();
CLCWDoc *pDoc=(CLCWDoc *)pDocTemplate->GetNextDoc(pos);
ASSERT_VALID(pDoc);
POSITION vpos=pDoc->GetFirstViewPosition();
CChildView *pCV=(CChildView *)pDoc->GetNextView(vpos);
Run Code Online (Sandbox Code Playgroud)

这对我来说很奇怪.我只有一个文档和一个视图.我觉得我正在使用GetNextDoc()和GetNextView()向后推进它.尝试使用愚蠢的比喻; 这就像我手里拿着一本书,但我必须查看它的索引,找出书的标题所在的页面.我厌倦了对我的代码感到尴尬.我需要纠正或保证,或两者兼而有之.:)

此外,所有杂项都没有特别的顺序.我想将它们重新排列成可能更标准,更有条理或更直接的订单.

欢迎所有建议!

BOOL CLCWApp::InitInstance()
{
 InitCommonControls();
 if(!AfxOleInit())
  return FALSE;

    // Initialize the Toolbar dll. (Toolbar code by Nikolay Denisov.)
 InitGuiLibDLL(); // NOTE: insert GuiLib.dll into the resource chain

 SetRegistryKey(_T("Real Name Removed"));

 // Register document templates
 CSingleDocTemplate* pDocTemplate;
 pDocTemplate = new CSingleDocTemplate(
  IDR_MAINFRAME,
  RUNTIME_CLASS(CLCWDoc),
  RUNTIME_CLASS(CMainFrame),
  RUNTIME_CLASS(CChildView));
 AddDocTemplate(pDocTemplate);

 // Parse command line for standard shell commands, DDE, file open
 CCmdLineInfo cmdInfo; …
Run Code Online (Sandbox Code Playgroud)

mfc docview visual-c++

0
推荐指数
1
解决办法
492
查看次数

Invalidate()调试断言失败消息(MFC,VC++)

我已经制作了一个自定义控件,当我希望它在屏幕上重新绘制时我调用Invalidate(),然后调用UpdateWindow(),但是我得到了消息:

对于第150行中的文件afxwin2.inl,debug assertion失败,这是:

AFXWIN_INLINE void CWnd::Invalidate(BOOL bErase)

    { ASSERT(::IsWindow(m_hWnd)); ::InvalidateRect(m_hWnd, NULL, bErase); }
Run Code Online (Sandbox Code Playgroud)

问题是,当我在发布模式下运行相同的应用程序时,它不会报告任何消息!所以这个线索让我觉得这是关于我应该改变的一些环境配置.

你怎么看?

谢谢.

c++ mfc visual-c++

0
推荐指数
1
解决办法
2822
查看次数

重构我的代码.我的标题(Header Guard问题)

基于我得到的错误,我有一篇类似于此前的帖子.我能够解决它,但从那时起我一直在做事情,因为标头阻止其他标头使用代码.老实说,这些标题让我很困惑,如果有人有任何资源可以解决这些类型的问题,那将会有所帮助.

我基本上想要做的是能够将rModel.h包含在RenderEngine.h中.每次我将rModel.h添加到RenderEngine.h时,rModel.h都不再能够使用RenderEngine.h.(rModel.h也有一个#include of RenderEngine.h).

简而言之,RenderEngine和rModel需要使用彼此的功能.除了所有这些混乱之外,Main.cpp还需要使用RenderEngine.

stdafx.h中

#include "targetver.h"

#define WIN32_LEAN_AND_MEAN             // Exclude rarely-used stuff from Windows headers
// Windows Header Files:
#include <windows.h>

// C RunTime Header Files
#include <stdlib.h>
#include <malloc.h>
#include <memory.h>
#include <tchar.h>
#include "resource.h"
Run Code Online (Sandbox Code Playgroud)

main.cpp中

#include "stdafx.h"
#include "RenderEngine.h"
#include "rModel.h"

// Global Variables:

RenderEngine go;

rModel *g_pModel;

...code...........
Run Code Online (Sandbox Code Playgroud)

rModel.h

#ifndef _MODEL_H
#define _MODEL_H
#include "stdafx.h"
#include <vector>
#include <string>
#include "rTri.h"
#include "RenderEngine.h"

........Code
Run Code Online (Sandbox Code Playgroud)

RenderEngine.h

#pragma once
#include "stdafx.h"
#include "d3d10.h"
#include "d3dx10.h"
#include "dinput.h" …
Run Code Online (Sandbox Code Playgroud)

c c++ visual-studio-2008 visual-studio visual-c++

0
推荐指数
1
解决办法
183
查看次数

错误C2143:语法错误:在'常量之前'缺少')'

我一直在我的项目上得到这个错误,我无法弄明白!请帮忙!

错误C2143:语法错误:'常量'之前缺少')'

这条线是:

while (selection == ('a','b','c', 'd', 'e', 'f', 'g', 'h', 'i','A','B' 'C', 'D', 'E', 'F', 'G', 'H', 'I');
Run Code Online (Sandbox Code Playgroud)

我也知道有一种更简单的方式来写出那条线,但我不知道我怎么做.我是初学者,所以你们中的任何人都可以为我编辑这行!

visual-c++

0
推荐指数
1
解决办法
2162
查看次数

我什么时候需要释放内存?

我在一个类中使用此代码来使webbrowser控件访问一个网站:

void myClass::visitWeb(const char *url)
{
    WCHAR buffer[MAX_LEN];
    ZeroMemory(buffer, sizeof(buffer));
    MultiByteToWideChar(CP_ACP, MB_ERR_INVALID_CHARS, url, strlen(url), buffer, sizeof(buffer)-1);

    VARIANT vURL;
    vURL.vt = VT_BSTR;
    vURL.bstrVal = SysAllocString(buffer);

    // webbrowser navigate code...

    VariantClear(&vURL);
}
Run Code Online (Sandbox Code Playgroud)

我从另一个void函数调用visitWeb,该函数在app的handlemessage()上调用.我需要在这里做一些内存释放吗?我看到varurClear正在释放vURL,但是我应该为缓冲区释放内存吗?我被告知在另一个bool我在同一个应用程序中我不应该释放任何东西,因为当bool返回true/false时一切都清除了,但是这个空白会发生什么?

c++ memory-management visual-c++

0
推荐指数
1
解决办法
776
查看次数

我遇到了致命错误......任何人都可以帮我编辑我的程序吗?

我得到的错误是:

错误1错误LNK2019:未解析的外部符号"double __cdecl getDollarAmt(void)"(?getDollarAmt @@ YANXZ)在函数_main hid.obj中引用错误2致命错误LNK1120:1未解析的外部

这是我的计划:

 #include<iostream>
#include<cmath>
#include<string>
using namespace std;

double getDollarAmt();
void displayCurrencies();
char getCurrencySelection (float amtExchanged);
bool isSelectionValid(char selection);
double calcExchangeAmt (float amtExchanged, char selection);
void displayResults(double newAmount, float amtExchanged, char selection, char yesNo);

const double  russianRubles = 31.168;
const double northKoreanWon = .385;
const double chineseYuan = 6.832;
const double canadianDollar = 1.1137;
const double cubanPeso = 1.0;
const double  ethiopianBirr = 9.09;
const double egyptianPound = 5.6275;
const double tunisianDinar = 1.3585; …
Run Code Online (Sandbox Code Playgroud)

visual-c++

0
推荐指数
1
解决办法
124
查看次数