㈠ 用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);