㈠ 用C语言怎么编写小游戏,用语句怎么引用图片,图片是在哪里制作的
这个问题应该是怎么学习C语言的问题
会用C/C++语言(两者不能拆开,要是找工作说你就会C不会C++会被笑话的)。
看完C++primer后面就可以先放下理论的知识了(当然以后还是要看C++编程思想,C++专家编程,不过这些可以工作几年后把)。然后双管其下,MFC+WINDOWs编程。两个一起看。一个是软件应用,一个是编写WINDOWS软件所要学习的!!!
Windows编程类
Windows 程序设计第5版上、下册
原书名: Programming Windows (Fifth Edition)
原出版社:Microsoft Press
作者:(美)Charles Petzold
译者:北京博彦科技发展有限责任公司
出版社:北京大学出版社
出版日期:2001-03
页码:1376
定价:160:00RMB
此书被认为是Windows编程最好的导论性读本。在1994年5月,此书的作者Charles Petzold被《Window Magazine》和Microsoft公司授予”Windows Pioneer”奖,以表彰他对Microsoft Windows的成功作出的贡献,可见该书的权威性,以至于“如果对Windows开发有什么问题的话,请翻阅PetZold的着作吧”几乎成了一句至理名言。
本书覆盖了WINDOWS编程的方方面面,将windows编程的每一个元素(如输入,输出及对话框,图形,多媒体,线程,文档与视图,Internet等等)讲解得很清晰、简明,采用的大多是具有代表性的示例,代码风格好并且很有实用价值。笔者认为这本书是学习WINDOWS编程的经典入门好书,每一次的细心阅读都会对WINDOWS编程有更深刻的理解, 不过笔者认为书中讲的内容都较为基础,更深层的东西可以去看《WINDOWS核心编程》。
笔者建议有条件的读者,最好阅读英文原版。
Windows核心编程 原书名: Programming Applications for Microsoft Windows Fourth Editio
原出版社:Microsoft Press
作者:(美)Jeffrey Richter
译者:王建华等
出版社:机械工业出版社
出版日期:2000-05
页码:689
定价:86:00RMB
Jeffrey Richter 是 Windows System 程序设计的头头,他的每一本书都对 Windows 核心有很精彩的剖析,笔者从《Windows 95 程式设计指南》,《Windows高级编程指南》,《Windows核心编程》到《Applied Microsoft .NET Framework Programming(影印版)》一直阅读他写的书,可以说本本经典,阿蒙是他的崇拜者,死心踏地地追随Jeffrey Richter。
本书是讲解Windows 操作系统内部机制的专着,作者从基本概念入手,全面系统地介绍了Windows的各种基本构件,如进程、线程、DLL和内存管理等,并列举了大量应用程序,精辟地分析了构件的使用方法,为掌握Windows 编程技巧提供了一条有效的捷径。笔者写过两年的windows驱动程序, 本书的内存管理章节给我提供了很大的帮助,可见本书对内存管理讲得非常地透彻。另外本书对进程和线程的讲解也十分地经典,先说明其来龙去脉,然后描述其中的工作机制,并详细说明windows提供了哪些API函数来进行多进程与多线程的程序设计,如果能结合侯捷老师的《Win32多线程程序设计》一起研究的话,那你对进程与线程的理解将更有深度。
Win32 多线程程序设计
作者:侯俊杰(侯捷)
出版社:华中科技大学出版社
出版日期:2002-01
页码:480
定价:59 .80RMB
使用线程,你可以产生高效率的服务器,建立Internet服务器扩充软件,获得多CPU系统的好处,建立精巧的COM/OLE对象,并改善程序的反应度。
本书的第一篇“上路吧,线程”,为你建立必要的基础,包括线程的启动和结束、核心对象、激发和未激发状态的意义、同步机制及其用途。第二篇“多线程程序设计的工具与策略”,介绍C runtime函数库和MFC对线程的支持、如何在USER和GDI的限制之下施行多线程、如何产生一个DLL、如何对多线程程序调试。第三篇“真实世界中的多线程应用程序”,谈论如何组织一个程序,使它有效支持多线程。本篇示范两个真实世界中的应用软件,第一个是个freethreaded OLE automation server,第二个是 ISAPI程序,是个IIS(Internet Information Server)扩充软件,示范如何和JET数据库交谈。
本书从理论到实际应用讲得很全面及易懂,范例程序也很丰富并且具体生动,而且书里不时地在一些需要注意的地方给出一些总结性的建议,这不仅让读者倍感亲切,而且也加深了对所学内容的理解。
MFC编程类
MFC Windows程序设计(第2版)
原书名: Programming Windows with MFC Second Edition
原出版社:Microsoft Press
作者:(美)Jeff Prosise
译者:北京博彦科技发展有限公司
出版社:清华大学出版社
出版日期:2001-09
页码:1166
定价:128:00RMB
本书不仅扩展了已被认为是权威的关于Microsoft 用于windows API的功能强大的C++类库的阐述,还新增了有关COM,OLE和ActiveX等内容。本书的作者,Jeff Prosise,用其无与伦比的技巧向读者讲述了MFC程序设计中的基本概念和主要技术-再次阐释了在32位windows平台上进行快速的面向对象开发的完美方法。
笔者认为本书讲解细致而且全面,比较适合初学者,
深入浅出MFC(第二版)
作者:侯俊杰(侯捷)
出版社:华中科技大学出版社
出版日期:2001-01
页码:736
定价:80:00RMB
有关这本书及其作者,不用我多说,大家已非常清楚,网上也是众说纷坛。
本书分为四大篇。第一篇讲SDK编程,简单明了的概括了SDK程序设计的主要原理,提供进入MFC核心技术以及应用技术之前的所有技术基础,特别是Windows的消息机制,讲得很清楚。第二篇介绍Visual C++整合环境开发工具,对整个软体开发环境有全盘以及概观性的介绍,可以让初学者迅速了解手上掌握的工具,以及它们的主要功能。第三篇介绍application framework的观念,以及MFC骨干程序,所谓骨干程序,是指Visual C++的工具AppWizard所产生出来的程序码。根据我的了解,太多人使用 MFC 是编写程序只是知其然而不知其所以然,本篇详细解释 MFC 程式之来龙去脉,为初入 MFC 领域的读者奠定扎实的基础。第四篇以微软公司附于Visual C++光盘片上的一个范例程序Scribble为主轴,一步一步加上新的功能。并在其间深入介绍Runtime Type Information(RTTI)、Dynamic Creation、Persistence(Serialization)、Message Mapping、Command Routing等核心技术。这些技术正是其他书籍最缺乏的部分。
“初学者只需掌握它的精髓,而不需深究它的全部内容,否则很有可能你会看不懂,等你在不断学习过程中,返过来重复学习,你将会发现此书的奥秘所在”。
COM编程类
COM原理与应用
作者:潘爱民
出版社:清华大学出版社
出版日期:2001-03
页码:472
定价:39:00RMB
本书不仅介绍了COM的基本原理及其扩展知识,还讲述了MTS及COM+的一些知识。全书分为三部分,第一部分为COM基础,作者在写这部分内容时,参阅了“Inside COM”一书,但对内容结构进行了重新调整,并增加了一些关于WINDOWS程序设计和MFC方面的知识;第二部分为COM扩展,第三部分为COM应用与发展,介绍了组件化程序设计思想以及多层软件结构模型。读者在学习了COM的基本原理之后,结合MTS和COM+所倡导的一些概念,就可以从更高的层次来理解和使用COM及COM+了。
对于COM初学者来说这是一本经典的书, 它由浅到深的论述使你对COM的概念及框架有较深的理解。
COM本质论
原书名:Essential COM
作者:(美)Box,D.
译者:潘爱民
出版社:中国电力出版社
出版日期:2001-08
页码:358
定价:49:00RMB
本书由具有鬼才之称的Don Box撰写,在计算机界,“没有人能把COM阐释得比Don Box更清楚”。
本书无疑是COM领域中最负有盛名的一本书。在亚马逊的排行榜上曾盘踞数月之久,很多专家给其以极高的评价。读完这本书之后,COM对于您会“变得再明白不过了”(这是“Inside OLE”的作者Kraig Brockschmidt和本书的作者DonBox在顿悟了COM和OLE之后的境界)。期望您会有这样的感受。
本书揭示了COM(组件对象模型)的本质,旨在帮助开发人员真正理解COM的为什么,而不仅限于怎么使用。书中还提供了一个完整的分布式COM应用,演示了各种编程技术。此外,本书还涉及到许多COM高级特性,例如线程模型(或者套间模型)、名字对象、连接点等,因此,要想从本书获得最大受益,您也需要有COM的知识作基础,建议读者先阅读《COM原理与应用》之后再阅读本书。
“ 这不是一本供新手学习的书,也不是一本教您如何开发COM组件的书,而是一本在一定的基础上继续提高对COM的理解的书。如果用它来学习COM,您可能会失望,因为许多内容需要有一定的经验基础才能看得明白;但是如果用它来加深自己对COM的理解,那么这本书再合适不过了。”
差书点评
《MFC开发人员参考手册 》
本书是一本详细介绍MFC类库的工具书,它对MFC类库4.2版本中所有的类及其成员都做了比较详细的说明.笔者认为MSDN就是最好的工具,没有必要花这个冤枉钱.
学习心得
看了不少的书,也写了不少的代码,简单总结一下我的学习方法,笔者是按以下的顺序来学习的:C/C++ ――> SDK ――> MFC ――>COM/DCOM/ATL/COM+,当然这个顺序的前提是你已经具备了一定的数学,数据结构及算法,操作系统等基础知识,学好C++是很关键的,尤其要理解清楚OOP思想,养成以面向对象方法去思考问题解决问题的习惯;学习SDK的目的主要是理解Windows OS的内部机制比如内存管理,多任务及多线程等,特别要透彻地理解Windows的消息机制;有了前面的知识,学起MFC就容易了,有些网友经常与我聊,说他看了一年多的书,也写一些程序,但对MFC还是一头雾水,我想主要的原因还是学习不够系统性,很多知识及经验是循序渐进的,千万不要幻想一步登天,要有持之以恒的学习及实践精神。
㈡ C语言如何引用背景图片
1、C语言写控制台程序是无法加图片的,只能用命令行输出,最多就是设置下背景和字体,颜色之类的。如果开发API窗口程序,完全依赖于操作系统的函数库。C语言本身并不提供这类函数。
2、下面是windows系统下实现的函数代码,第一个参数是图片的存放的位置,第二个参数是窗口句柄。
HRESULTShowPic(char*lpstrFile,HWNDhWnd)
{
HDChDC_Temp=GetDC(hWnd);
IPicture*pPic;
IStream*pStm;
BOOLbResult;
HANDLEhFile=NULL;
DWORDdwFileSize,dwByteRead;
//打开图形文件
hFile=CreateFile(lpstrFile,GENERIC_READ,
FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
if(hFile!=INVALID_HANDLE_VALUE)
{
dwFileSize=GetFileSize(hFile,NULL);//获取文件字节数
if(dwFileSize==0xFFFFFFFF)
returnE_FAIL;
}
else
{
returnE_FAIL;
}
//分配全局存储空间
HGLOBALhGlobal=GlobalAlloc(GMEM_MOVEABLE,dwFileSize);
LPVOIDpvData=NULL;
if(hGlobal==NULL)
returnE_FAIL;
if((pvData=GlobalLock(hGlobal))==NULL)//锁定分配内存块
returnE_FAIL;
ReadFile(hFile,pvData,dwFileSize,&dwByteRead,NULL);//把文件读入内存缓冲区
GlobalUnlock(hGlobal);
CreateStreamOnHGlobal(hGlobal,TRUE,&pStm);
//装入图形文件
bResult=OleLoadPicture(pStm,dwFileSize,TRUE,IID_IPicture,(LPVOID*)&pPic);
if(FAILED(bResult))
returnE_FAIL;
OLE_XSIZE_HIMETRIChmWidth;//图片的真实宽度,单位为英寸
OLE_YSIZE_HIMETRIChmHeight;//图片的真实高度,单位为英寸
pPic->get_Width(&hmWidth);
pPic->get_Height(&hmHeight);
//转换hmWidth和hmHeight为pixels距离,1英寸=25.4毫米
intnWidth=MulDiv(hmWidth,GetDeviceCaps(hDC_Temp,LOGPIXELSX),2540);
intnHeight=MulDiv(hmHeight,GetDeviceCaps(hDC_Temp,LOGPIXELSY),2540);
//将图形输出到屏幕上(有点像BitBlt)
bResult=pPic->Render(hDC_Temp,0,0,nWidth,nHeight,0,hmHeight,hmWidth,-hmHeight,NULL);
hmHeight,NULL);
pPic->Release();
CloseHandle(hFile);//关闭打开的文件
if(SUCCEEDED(bResult))
{
returnS_OK;
}
else
{
returnE_FAIL;
}
}
㈢ 谁能告诉我,C语言怎么用程序调用图片
我有个显示BMP的程序,是个窗口程序,你参考一下。
#include <windows.h>
#include "resource.h"
LRESULT CALLBACK WindowProc(
HWND hwnd, // handle to window
UINT uMsg, // message identifier
WPARAM wParam, // first message parameter
LPARAM lParam // second message parameter
);
int bmp_width,bmp_height;
HDC hMemDC;
int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
{
WNDCLASS wc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hbrBackground = (HBRUSH)(COLOR_3DFACE+1);
wc.hCursor = LoadCursor(NULL,IDC_ARROW);
wc.hIcon = LoadIcon(hInstance,(LPCTSTR)IDI_MAIN);
wc.hInstance = hInstance;
wc.lpfnWndProc = WindowProc;
wc.lpszClassName = "07LoadBMP";
wc.lpszMenuName = NULL;
wc.style = CS_HREDRAW|CS_VREDRAW;
RegisterClass(&wc);
HWND hMainWnd = CreateWindow(wc.lpszClassName,"载入BMP图象",WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,LoadMenu(hInstance,(LPCTSTR)IDM_MAIN),hInstance,NULL);
if(!hMainWnd) return -1;
ShowWindow(hMainWnd,nCmdShow);
UpdateWindow(hMainWnd);
MSG msg;
while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
LRESULT CALLBACK WindowProc(
HWND hwnd, // handle to window
UINT uMsg, // message identifier
WPARAM wParam, // first message parameter
LPARAM lParam // second message parameter
)
{
switch(uMsg) {
case WM_CREATE:
{
HDC hDC = GetDC(hwnd);
hMemDC = CreateCompatibleDC(hDC);
bmp_width = 640;
bmp_height = 480;
}
break;
case WM_PAINT:
{
PAINTSTRUCT ps;
HDC hdc = BeginPaint(hwnd,&ps);
BitBlt(hdc,0,0,bmp_width,bmp_height,hMemDC,0,0,SRCCOPY);
EndPaint(hwnd,&ps);
}
break;
case WM_COMMAND:
{
switch(LOWORD(wParam)) {
case MENU_FILE_OPEN:
{
TCHAR szFileName[MAX_PATH]="";
OPENFILENAME file ={sizeof(file)};
file.lpstrFile = szFileName;
file.nMaxFile = MAX_PATH;
file.lpstrFilter = "位图Bitmap(*.bmp)\0*.bmp\0\0";
file.nFilterIndex = 1;
if(!GetOpenFileName(&file)) break;
// 打开文件.
HANDLE hFile = CreateFile(szFileName,GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
if(hFile==INVALID_HANDLE_VALUE) {
MessageBox(hwnd,"file not open.","ERROR",0);
break;
}
HANDLE hMap = CreateFileMapping(hFile,NULL,PAGE_READONLY,0,0,NULL);
LPVOID lpBase = MapViewOfFile(hMap,FILE_MAP_READ,0,0,0);
LPBITMAPFILEHEADER lpFileHeader; // 位图文件头
LPBITMAPINFO lpInfo; // 位图信息,内含信息头
lpFileHeader = (LPBITMAPFILEHEADER)lpBase;
if(lpFileHeader->bfType!=MAKEWORD('B','M')) {
MessageBox(hwnd,"不是一个有效的位图!","ERROR",0);
UnmapViewOfFile(lpBase);
CloseHandle(hMap);
CloseHandle(hFile);
break;
}
LPBYTE lpBitmapData = (LPBYTE)lpBase + lpFileHeader->bfOffBits;
lpInfo = (LPBITMAPINFO)((LPBYTE)lpBase+sizeof(BITMAPFILEHEADER));
bmp_width = lpInfo->bmiHeader.biWidth;
bmp_height = lpInfo->bmiHeader.biHeight;
HDC hdc = GetDC(hwnd);
HBITMAP hBitmap = CreateCompatibleBitmap(hdc,bmp_width,bmp_height);
SelectObject(hMemDC,hBitmap);
int nReturn = SetDIBitsToDevice(hMemDC,
0, // xDest
0, // yDest
bmp_width, // width
bmp_height, // height
0, // xSrc
0, // ySrc
0, // uStartScanLine
bmp_height, // cScanLines
lpBitmapData, // Bitmap Data
lpInfo,DIB_RGB_COLORS // DIB
);
InvalidateRect(hwnd,NULL,TRUE);
DeleteObject(hBitmap);
UnmapViewOfFile(lpBase);
CloseHandle(hMap);
CloseHandle(hFile);
SetWindowPos(hwnd,NULL,0,0,bmp_width,bmp_height,SWP_NOZORDER|SWP_NOMOVE);
}
break;
case MENU_FILE_EXIT:
SendMessage(hwnd,WM_CLOSE,0,0);
break;
}
}
break;
case WM_DESTROY:
DeleteDC(hMemDC);
PostQuitMessage(0);
break;
case WM_ERASEBKGND:
return 0;
break;
}
return DefWindowProc(hwnd,uMsg,wParam,lParam);
}
㈣ 怎么在程序中加入图片呢
试试基于C/C++语言的开源图像处理函数库OpenCV吧:
#include "cv.h"
#include "highgui.h"
int main( int argc, char** argv )
{
IplImage* pImg; //声明IplImage指针
//载入图像
if( argc == 2 &&
(pImg = cvLoadImage( argv[1], 1)) != 0 )
{
cvNamedWindow( "Image", 1 );//创建窗口
cvShowImage( "Image", pImg );//显示图像
cvWaitKey(0); //等待按键
cvDestroyWindow( "Image" );//销毁窗口
cvReleaseImage( &pImg ); //释放图像
return 0;
}
㈤ excel中如何引用图片
=IF(G3=1,HYPERLINK("d:\*.JPG","图片1"),HYPERLINK("d:\*.bmp","图片2")),采用这种方式但只能放7张图片,公式还很长,简单方法没有了
㈥ 怎样在java里用URL引入图片引入图片
URL对象中前而几个方法都非常容易理解,而该对象提供的openStream()可以读取该 URL资源的InputStream,通过该方法可以非常方便地读取远程资源。
下面的程序示范如何通过URL类读取远程资源:
1)只显示网络图片
1)只显示网络图片
引用图片处理的java类:
packagejun.king.urlgetimage;
importjava.io.InputStream;
importjava.net.URL;
importandroid.app.Activity;
importandroid.graphics.Bitmap;
importandroid.graphics.BitmapFactory;
importandroid.os.Bundle;
importandroid.os.Handler;
importandroid.os.Message;
importandroid.view.Menu;
importandroid.view.MenuItem;
importandroid.widget.ImageView;
{
Bitmapbitmap;
ImageViewimageview;
Handlerhandler=newHandler(){
@Override
publicvoidhandleMessage(Messagemsg){
if(msg.what==0x9527){
//显示从网上下载的图片
imageview.setImageBitmap(bitmap);
}
}
};
@Override
protectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
imageview=(ImageView)findViewById(R.id.imageView1);
//创建并启动一个新线程用于从网络上下载图片
newThread(){
@Override
publicvoidrun(){
try{
//创建一个url对象
URLurl=newURL("http://www..com/img/bdlogo.png");
//打开URL对应的资源输入流
InputStreamis=url.openStream();
//从InputStream流中解析出图片
bitmap=BitmapFactory.decodeStream(is);
//imageview.setImageBitmap(bitmap);
//发送消息,通知UI组件显示图片
handler.sendEmptyMessage(0x9527);
//关闭输入流
is.close();
}catch(Exceptione){
e.printStackTrace();
}
}
}.start();
}
@Override
(Menumenu){
//Inflatethemenu;.
getMenuInflater().inflate(R.menu.main,menu);
returntrue;
}
@Override
(MenuItemitem){
//Handleactionbaritemclickshere.Theactionbarwill
///Upbutton,solong
//.xml.
intid=item.getItemId();
if(id==R.id.action_settings){
returntrue;
}
returnsuper.onOptionsItemSelected(item);
}
}
㈦ 在java 中在代码中要引用的图片该放在哪个文件
放到任意文件夹都可以,看你的管理方式。
1、放到和程序目录下的某个文件夹中。
//假设图片放到程序运行目录的img目录下
BufferedImageimg=ImageIO.read(newFile("img/my.png"));
2、放到源文件中,和读取类在同一目录,使用时图片要按包名打包到jar中
//假设图片放到src下,和MyImages在一个目录
BufferedImageimg=ImageIO.read(MyImages.class.getResource("my.png"));
3、放到源文件中,但在独立文件夹中,使用时图片要按包名打包到jar中
//假设图片放到src下的img目录中
BufferedImageimg=ImageIO.read(MyImages.class.getResource("res/my.png"));
㈧ c语言中如何导入图片
1、首先先在图片取模软件找到软件快捷方式,点击打开软件。
㈨ 在JAVA 应用程序中如何加载图片
你可以了解一下
深入理解java虚拟机,
java类加载
是因为在运行时当它需要引用某个类的时候,会先去加载这个类,就是去读这个class文件到内存里面来,现在还没有创建这个类的实例,
你可以理解为
你写的java代码在编译成class文件后,并没有去执行,或者去引用他,只有程序运行时它将要使用这个类的时候才会去读取这个class文件,这时候叫做类加载,当缓存了这个类文件之后,后面的创建类的时候都会去引用它,因为类加载是运行是加载,所以java代码在运行时是有办法修改的,同样java类加载也允许加载一个远程的class文件,也代表它是支持程序不停止时更新程序代码的。
㈩ 如何在C++程序中调用图片
给MFC添加背景图图片代码:
定位到 void CXXXDlg::OnPaint(),在if()...else()中的else()下添加如下代码:
//CDialog::OnPaint();//要禁止这个调用
CPaintDC dc(this);
CRect rect;
GetClientRect(&rect);
CDC dcMem;
dcMem.CreateCompatibleDC(&dc);
CBitmap bmpBackground;
bmpBackground.LoadBitmap(IDB_BITMAP);
//IDB_BITMAP是你自己的图对应的ID
BITMAP bitmap;
bmpBackground.GetBitmap(&bitmap);
CBitmap *pbmpOld=dcMem.SelectObject(&bmpBackground); dc.StretchBlt(0,0,rect.Width(),rect.Height(),&dcMem,0,0,
bitmap.bmWidth,bitmap.bmHeight,SRCCOPY);