为什么我的c++程序无法显示图片

为什么我的c++程序无法显示图片,第1张

你的程序没有问题, 是你的的位置有问题, 你不要把放到和源代码一个文件夹下, 而是和生成的exe程序在一起, 如果你是用debug编译模式的话一般就在源代码目录下的debug目录下

下坡辅助功能可以在车辆下坡时,通过主动制动的方式控制车辆在驾驶员选定的速度范围内行驶,是一项改善汽车舒适性的功能。另外,在下坡辅助功能工作期间,当车轮滑移率超过ABS触发阀限时,ABS将会被自动激活。

下坡辅助功能的目标车速范围,挡位为D挡时是8到35km/h,挡位为R挡时是5到35km/h,即在驾驶员不踩制动的情况下,车辆在坡道上可以保持目标车速内的稳定车速行驶。而且,驾驶员可以通过制动、油门踏板调节目标车速。当车速超过目标车速范围时,下坡辅助功能退出工作。

要注意的是:

●下坡辅助功能仅配置在四驱车型。

●HDC开关打开后才能激活下坡辅助功能。

●HDC开关打开后,若车速超过60km/h, HDC开关会自动关闭。

●下坡辅助功能是舒适性功能,不能完全取代驾驶员意图,在陡峭、复杂山路,驾驶员应时刻准备自主控制车速。

一 从C/C++到Windows编程
我们学习的C/C++程序都是DOS程序(或称为Windows控制台程序),也就是现在大学里的开设的《C/C++程序设计》的内容,这些程序由于不涉及到Windows 编程的细节,因此比较容易入门学习,这对训练初学者的编程思想是很有用的,也是有益的。但是当我们基本掌握了C/C++程序设计后,就不能仅仅停留在DOS下(或Windows控制台下)编写、运行程序。我们应该从编程思想的训练到Windows实用编程的转变。
对于初学Windows 编程的人来说,入门是难了一点,我们先介绍一个最简单的Hello 程序开始,然后再介绍记事本程序。
#include <windowsh>
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,PSTR szCmdLine, int iCmdShow)
{
MessageBox(NULL,"Hello 欢迎使用Turbo C for Windows 集成实验与学习环境!","我的第一个Windows程序",MB_OK);
return 0;
}
程序解析:
1、windowsh是每一个Windows程序都需要的头文件。
2、WinMain函数是所有Windows C程序的入口,类似于DOS C中的main函数。
3、MessageBox是一个Win32 API函数(API,Application Programming Interface 应用程序接口),其作用是d出一个对话框,显示消息的内容。该函数的第一个参数是用来指定父窗口句柄,即对话框所在的窗口句柄。第二个参数是用来显示消息的内容(你可以修改成你想显示的内容)。第三个参数是 对话框标的标题,如本例的“我的第一个Windows程序”,第四个参数是指定对话框中显示的按钮,试一试,将MB_OK修改成MB_OKCANCEL,运行一下程序会出现什么结果,再试一试修改成MB_RETRYCANCEL
二、Windows 程序简介
(1)Windows C程序的组成:
1C程序源文件,扩展名为c或cpp
2头文件,扩展名为h
3资源文件,扩展名为rc
(2)源程序的组成结构
Windows C程序有相对固定的基本结构,一般有入口函数WinMain和窗口函数。
1、WinMain函数
是所有Windows C程序的入口,类似于DOS C的main函数,其功能是完成一系列的定义和初始化工作,并产生消息循环。消息循环是整个程序运行的核心。
WinMain函数有三个基本的组成部分:函数说明、初始化和消息循环
a、WinMain函数的说明:
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,PSTR szCmdLine, int iCmdShow)
参数说明:
hInstance 应用程序当前实例句柄
hPrevInstance 前一个实例句柄,在32位系统中该参数永远是NULL
szCmdLine 程序运行时的命令行参数
iCmdShow 程序运行时的显示方式,如最大化、最小化、隐藏显示等。
b、初始化
初始化包括窗口类的定义、注册、创建窗口实例和显示窗口四部分。
这是固定格式,所有的Windows程序基本一样,记住即可,具体参见下面的程序实例的注释。
2、窗口函数
窗口函数定义了Windows C程序对接受到的不同消息的响应,其中包含了应用程序对各种可能接收到的消息的处理过程,是消息处理分支控制语句的集合。通常窗口函数是有一个或多个switch语句组成。每一条case语句对应一种消息,当应用程序接收到一个消息时,就会执行相应case 语句下的程序模块来完成相应的功能。
窗口函数说明:
LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
参数说明:
hwnd 窗口句柄
message 代表所处理消息的消息值
wParam 消息的附加参数,是message的进一步信息
lParam 消息的附加参数,是message的进一步信息
一般用法:
LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{

switch (message)
{
case 常数1:

case 常数2:


case WM_DESTROY:
PostQuitMessage (0) ; //在消息队列中插入一条“退出”消息
return 0 ;
}
return DefWindowProc (hwnd, message, wParam, lParam);//执行默认的消息处理
}
窗口函数的主体是消息处理语句,该语句是有一系列case语句组成。我们学习者自需要根据窗口可能收到的消息在case语句中编写相应的处理程序即可。
作者:zhongjiamin 发表时间:2007-3-6 14:53:00
第1楼
三、一个简单的记事本程序
1记事本主程序
#include <windowsh>
#include "sampleh"
static char g_szClassName[] = "MyWindowClass";
static HINSTANCE g_hInst = NULL;
#define IDC_MAIN_TEXT 1001
BOOL LoadFile(HWND hEdit, LPSTR pszFileName)
{
HANDLE hFile;
BOOL bSuccess = FALSE;
hFile = CreateFile(pszFileName, GENERIC_READ, FILE_SHARE_READ, NULL,
OPEN_EXISTING, 0, 0);
if(hFile != INVALID_HANDLE_VALUE)
{
DWORD dwFileSize;
dwFileSize = GetFileSize(hFile, NULL);
if(dwFileSize != 0xFFFFFFFF)
{
LPSTR pszFileText;
pszFileText = (LPSTR)GlobalAlloc(GPTR, dwFileSize + 1);
if(pszFileText != NULL)
{
DWORD dwRead;
if(ReadFile(hFile, pszFileText, dwFileSize, &dwRead, NULL))
{
pszFileText[dwFileSize] = 0;
if(SetWindowText(hEdit, pszFileText))
bSuccess = TRUE;
}
GlobalFree(pszFileText);
}
}
CloseHandle(hFile);
}
return bSuccess;
}
BOOL SaveFile(HWND hEdit, LPSTR pszFileName)
{
HANDLE hFile;
BOOL bSuccess = FALSE;
hFile = CreateFile(pszFileName, GENERIC_WRITE, 0, 0,
CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
if(hFile != INVALID_HANDLE_VALUE)
{
DWORD dwTextLength;
dwTextLength = GetWindowTextLength(hEdit);
if(dwTextLength > 0)
{
LPSTR pszText;
pszText = (LPSTR)GlobalAlloc(GPTR, dwTextLength + 1);
if(pszText != NULL)
{
if(GetWindowText(hEdit, pszText, dwTextLength + 1))
{
DWORD dwWritten;
if(WriteFile(hFile, pszText, dwTextLength, &dwWritten, NULL))
bSuccess = TRUE;
}
GlobalFree(pszText);
}
}
CloseHandle(hFile);
}
return bSuccess;
}
BOOL DoFileOpenSave(HWND hwnd, BOOL bSave)
{
OPENFILENAME ofn;
char szFileName[MAX_PATH];
ZeroMemory(&ofn, sizeof(ofn));
szFileName[0] = 0;
ofnlStructSize = sizeof(ofn);
ofnhwndOwner = hwnd;
ofnlpstrFilter = "文本文件 (txt)\0txt\0所有文件 ()\0\0\0";
ofnlpstrFile = szFileName;
ofnnMaxFile = MAX_PATH;
ofnlpstrDefExt = "txt";
if(bSave)
{
ofnFlags = OFN_EXPLORER | OFN_PATHMUSTEXIST | OFN_HIDEREADONLY |
OFN_OVERWRITEPROMPT;
if(GetSaveFileName(&ofn))
{
if(!SaveFile(GetDlgItem(hwnd, IDC_MAIN_TEXT), szFileName))
{
MessageBox(hwnd, "保存文件失败", "错误信息",
MB_OK | MB_ICONEXCLAMATION);
return FALSE;
}
}
}
else
{
ofnFlags = OFN_EXPLORER | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY;
if(GetOpenFileName(&ofn))
{
if(!LoadFile(GetDlgItem(hwnd, IDC_MAIN_TEXT), szFileName))
{
MessageBox(hwnd, "打开文件失败", "错误信息",
MB_OK | MB_ICONEXCLAMATION);
return FALSE;
}
}
}
return TRUE;
}
LRESULT CALLBACK WndProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam)
{
switch(Message)
{
case WM_CREATE:

恩,很好用的是纯正的api,用loadimage(里面的参数),获取对应的image 的句柄,这个是api,然后如果是在你的mfc环境下,可以这么做获取Cbutton b=Cbutton::fromhandle(你上面的按钮句柄),然后b->setbitmap(图像对应的句柄),或者直接api函数,SetBitmap(按钮句柄,句柄),遗憾,我已经转入C﹟的学习,

1创建ClmageList对象,指定的宽度和高度
2将CImageList对象传递给CListCtrl对象
3ClistCtrl增加item时,将ID和文字一起传入
具体代码如下:
ListImagecpp代码如下
// ListImagecpp : implementation file
//
#include "stdafxh"
#include "practiseh"
#include "ListImageh"
#define THUMWIDTH 75
#define THUMHEIGHT 55
// ListImage dialog
IMPLEMENT_DYNAMIC(ListImage, CDialog)
ListImage::ListImage(CWnd pParent /=NULL/)
: CDialog(ListImage::IDD, pParent)
{
}
ListImage::~ListImage()
{
}
void ListImage::DoDataExchange(CDataExchange pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_LIST1, m_List);
DDX_Control(pDX, IDC_EDIT2, m_edit2);
}
BEGIN_MESSAGE_MAP(ListImage, CDialog)
ON_BN_CLICKED(IDC_BUTTON1, &ListImage::OnBnClickedButton1)
ON_BN_CLICKED(IDOK, &ListImage::OnBnClickedOk)
END_MESSAGE_MAP()
// ListImage message handlers
BOOL ListImage::OnInitDialog()
{
CDialog::OnInitDialog();
// TODO: Add extra initialization here
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void ListImage::OnBnClickedButton1()
{
// TODO: Add your control notification handler code here
//文件对话框
CString FilePath;
CFileDialog FileDialog(true, _T(""), _T(""), OFN_EXPLORER,
_T("所有文件()|||"), this);
//显示对话框
if(FileDialogDoModal() == IDOK)
{
FilePath = FileDialogGetPathName();
int g=FilePathReverseFind('\\');
FilePath=FilePathLeft(g+1);
m_edit2SetWindowText(FilePath);
}
else
{
return;
}
//清楚m_ImageList对象和m_List
if (m_ImageList!=NULL)
{
for(int kk=0;kk <m_ImageListGetImageCount();kk++)
m_ImageListRemove(kk);
m_ListDeleteAllItems();
}
else
{
m_ImageListCreate(THUMWIDTH,THUMHEIGHT, ILC_COLORDDB|ILC_MASK, 20, 1);
m_ListSetImageList(&m_ImageList, LVSIL_NORMAL);
m_ListSetImageList(&m_ImageList, LVSIL_SMALL);
}
m_ListSetRedraw(false);
CString strDir=FilePath+_T("");
//strDirFormat("%s%s",FilePath,L"");
//_T("D:\\happiness\\风景桌面\\");
int i=0,cn=0,j=0;
SHFILEINFO finfo;
CString fileName;
CString filePath2;
HANDLE hFind;
WIN32_FIND_DATA fd ;
hFind=::FindFirstFile((LPCTSTR)strDir,&fd);
if(hFind==INVALID_HANDLE_VALUE)return;
do
{
if ( !wcscmp(fdcFileName, _T("")) || !wcscmp(fdcFileName, _T("")))continue;
if(fddwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)continue;
fileName=fdcFileName;
filePath2=FilePath+fileName;
i=fileNameFind(_T("jpg"),0);
//加载jpg,jpeg,gif格式的
if (i==-1)
i=fileNameFind(_T("jpeg"),0);
if (i==-1)
i=fileNameFind(_T("JPG"),0);
if (i==-1)
i=fileNameFind(_T("JPEG"),0);
if (i==-1)
i=fileNameFind(_T("gif"),0);
if (i==-1)
i=fileNameFind(_T("GIF"),0);
if (i==-1)
i=fileNameFind(_T("BMP"),0);
if (i==-1)
i=fileNameFind(_T("bmp"),0);
if (i!=-1)
{
//Creating thumbnail image for the file
HBITMAP bitm=LoadPicture(filePath2);
if (bitm!=NULL)
{
CBitmap pImage = NULL;
pImage = new CBitmap();
pImage->Attach(bitm);
int imgP=m_ImageListAdd(pImage,RGB(0,0,0));
//Link to the added listview item
m_ListInsertItem(cn,fileName,imgP);
}
}
//加载icon
i=fileNameFind(_T("ico"),0);
if (i==-1)
i=fileNameFind(_T("ICO"),0);
if (i==-1)
i=fileNameFind(_T("rc"),0);
if (i==-1)
i=fileNameFind(_T("rc2"),0);
if (i!=-1)
{
::SHGetFileInfo(filePath2,0,&finfo,sizeof(SHFILEINFO),SHGFI_ICON);
m_ImageListAdd(finfohIcon);//加入图标
m_ListInsertItem(cn,fileName,cn);
}
cn++;
}while(::FindNextFile(hFind,&fd));
FindClose(hFind);
m_ListSetRedraw(true);
Invalidate();
UpdateWindow();
}
HBITMAP ListImage::LoadPicture(CString mFile)
{
CString pFSize;
WCHAR wpath[MAX_PATH];
// MultiByteToWideChar(CP_ACP, 0,lpszBuf, -1, wpath, MAX_PATH);
IPicture pPic;
OleLoadPicturePath(T2OLE((LPTSTR)(LPCTSTR)mFile), NULL, NULL, NULL, IID_IPicture,(LPVOID)&pPic);
if (pPic==NULL) return NULL;
HBITMAP hPic = NULL;
pPic->get_Handle((UINT)&hPic);
long nWidth=THUMWIDTH;
long nHeight=THUMHEIGHT;
long mWid,mHei;
pPic->get_Height(&mHei);
pPic->get_Width(&mWid);
HBITMAP hPicRet = (HBITMAP)CopyImage(hPic, IMAGE_BITMAP, nWidth, nHeight , LR_COPYDELETEORG);
// Create Brushes for Border and BackGround
HBRUSH hBrushBorder=::CreateSolidBrush(RGB(192, 192, 192));
HBRUSH hBrushBk=::CreateSolidBrush(RGB(255, 255, 255));
// Border Size
RECT rcBorder;
rcBorderleft=rcBordertop=0;
rcBorderright=THUMWIDTH;
rcBorderbottom=THUMHEIGHT;
const float fRatio=(float)THUMHEIGHT/THUMWIDTH;
int XDest, YDest, nDestWidth, nDestHeight;
// Calculate Rect to fit to canvas
const float fImgRatio=(float)mHei/mWid;
if(fImgRatio > fRatio)
{
nDestWidth=(THUMHEIGHT/fImgRatio);
XDest=(THUMWIDTH-nDestWidth)/2;
YDest=0;
nDestHeight=THUMHEIGHT;
}
else
{
XDest=0;
nDestWidth=THUMWIDTH;
nDestHeight=(THUMWIDTHfImgRatio);
YDest=(THUMHEIGHT-nDestHeight)/2;
}
CClientDC cdc(this);
HDC hDC=::CreateCompatibleDC(cdcm_hDC);
HBITMAP bm = CreateCompatibleBitmap(cdcm_hDC, THUMWIDTH, THUMHEIGHT);
HBITMAP pOldBitmapImage = (HBITMAP)SelectObject(hDC,bm);
// Draw Background
::FillRect(hDC, &rcBorder, hBrushBk);
// Draw Border
::FrameRect(hDC, &rcBorder, hBrushBorder);
HBITMAP hBmReturn= (HBITMAP)::SelectObject(hDC, pOldBitmapImage);
CDC hdcSrc, hdcDst;
hdcSrcCreateCompatibleDC(NULL);
hdcDstCreateCompatibleDC(NULL);
// Load the bitmaps into memory DC
CBitmap hbmSrcT = (CBitmap) hdcSrcSelectObject(hPicRet);
CBitmap hbmDstT = (CBitmap) hdcDstSelectObject(hBmReturn);
// This call sets up the mask bitmap
hdcDstBitBlt(XDest,YDest,nDestWidth, nDestHeight, &hdcSrc,0,0,SRCCOPY);
//hdcDstStretchBlt(XDest,YDest,nDestWidth, nDestHeight, &hdcSrc,0,0,48,48,SRCCOPY);
pOldBitmapImage = (HBITMAP)SelectObject(hdcDstm_hDC,bm);
// Release used DC and Object
DeleteDC(hDC);
DeleteObject(hBrushBorder);
DeleteObject(hBrushBk);
return pOldBitmapImage;
}
void ListImage::OnBnClickedOk()
{
// TODO: Add your control notification handler code here
OnOK();
}
----------------------------------------------------------------------------------------------------
ListImageh代码如下
#pragma once
#include "afxcmnh"
#include "afxwinh"
// ListImage dialog
class ListImage : public CDialog
{
DECLARE_DYNAMIC(ListImage)
public:
ListImage(CWnd pParent = NULL); // standard constructor
virtual ~ListImage();
CImageList m_ImageList;
HBITMAP ListImage::LoadPicture(CString mFile);
// Dialog Data
enum { IDD = IDD_DIALOG1 };
protected:
virtual void DoDataExchange(CDataExchange pDX); // DDX/DDV support
virtual BOOL OnInitDialog();
DECLARE_MESSAGE_MAP()
public:
afx_msg void OnBnClickedButton1();
CListCtrl m_List;
CEdit m_edit2;
afx_msg void OnBnClickedOk();
};
或者 在CXXXApp::InitInstance()下
使用ASSERT(AfxOleInit() != FALSE ); //Initialize COM libraries
m_ListSetBkImage("c:\\background2bmp");
m_ListSetTextBkColor(CLR_NONE); //设置背景透明
也有人说 LoadBitmap然后CListCtrl::SetBkImage,不需要位图文件

当车辆前方遇陡坡或者连续下坡时,驾驶员可以按下HDC开关(如下图),ESC系统会控制车速在稳定的范围:

●踩下制动踏板、油门踏板,控制车速在8~35km/h,松开后车辆按照当前速度在坡路上稳定行驶;

●ESC系统控制车速,您可以更专注于方向盘,安全、快速通过坡路。

要注意的是:

发动机启动后,ESC功能默认开启。为了行车安全,建议开启ESC功能。仅在某些特殊情况下,才建议关闭:

●装有防滑链时

●在深雪或松软的路面行驶时

●在汽车被困摆脱卡陷时

ESC、TCS功能提供了更高的安全性,但谨慎和专心驾驶是您的责任!

行车时,应保持合适的车距,勿对制动距离盲目自信。

ESC的稳定控制能力与制动系统、悬架系统(如轮胎)、转向系统、电器系统等密切相关,私自改装车辆,可能引起ESC性能下降或者失效。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/13407821.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-07-30
下一篇 2023-07-30

发表评论

登录后才能评论

评论列表(0条)

保存