xlib編程
Ⅰ linux 下怎麼畫圖
1.可以用編寫程序中實現畫圖功能,在linux下一般是基於xlib和opengl的,窗口化部分則是交給qt或gtk
嫌麻煩的話,可以用glut,這個是基於opengl的功能包,功能較簡單,適合拿來玩熟原理
Ⅱ (急)VBA程序的建立,編輯和運行方法
VBA概述:VBA是Visual Basic For Application的縮寫,是VB在office中的運用。是基於Visual Basic For Windows發展而來的,VB For Windows是Microsoft於1992年推出的開發Windows應用程序的程序設計語言,由於基語法簡單,易學易用,所以深受用戶的歡迎。而VBA和VB For Windows大體相似。
在Office2000之前,VBA在Word,Excel,Access等Office系統軟體中的運用有些有同,但是到Office2000就統一起來了。
Excel是第一個包含有VBA的應用程序,自Office2000以後,Eexel,Word,PowerPoint,Access中已經有了統一標準的宏語言VBA,其中Excel和Access的VBA最為成熟。
在Excel中VBA程序即可以存放有.xls中,也可以單獨以文本形式存放。對VBA的學習,用戶首先必須VB有一定的了解(不過不必很專業,畢竟經常用Excel的用戶一般是辦公人員,不可能是專業編程人員),然後結合宏記錄器學習。因為,宏記錄器可以記錄宏,用戶可以非常清楚瞭然VBA的很多知識。另外,如果不是功能很強大的VBA程序,那麼用宏記錄器就足夠了。打開密碼記錄器的方法,通過「工具->宏->錄制新宏」。另外,用戶可能用「工具->宏->宏...」來管理宏。用「工具->宏->VB 編輯器」或Alt+F11可以打開VB編輯器,在VB編程器,可以很方便地整個VB工程進行管理,可以方便地編寫VBA代碼,另外,用戶可以再點擊Alt+F11切換到Excel窗口。
VBA的使用過程:
1、創建一個Excel文件。
2、創建一個控制項,然後雙擊控制項或是右擊該控制項,點擊「查看代碼」,就可以對該控制項的某個事件,如click,keydown等。
進行編寫執行代碼了。創建控制項的方法是,點擊「視圖->工具欄->控制項工具箱」,打開「控制項工具箱」欄,然後就可以直接拖動某個控制項到Excel單元格中去。在Excel中窗口,添加的控制項一般是處於執行狀態的,如果要對這個控制項進行編輯,除了第一次建立的時候可以對它進行屬性編輯外,打開「控制項工具箱」,也可以使控制項處於編輯狀態,如果還不行,可以再添加一個控制項,然後已有的控制項絕對會處於編輯狀態。當然,對控制項修改完畢後,別忘了刪除剛才新添加的沒有用的控制項。在編輯狀態中,你可以右擊該控制項,點擊「屬性」,那麼就可以打開屬性窗口,在這個窗口裡,你可以很方便的對這個控制項的名字,標題,大小等屬性進行編輯。
3、手動或用宏記錄器對該控制項的某個事件進行編碼。宏記錄器簡單易用,不過強大的功能還是必須手動編寫VBA。
VBA對象介紹:
編寫VBA代碼的最關鍵在於靈活運用VBA對象,對這些VBA對象的屬性或方法進行操作。另外,你也可以創建自定義函數,來對某些操作進行封裝。既然是VBA,編碼風格當然和VB相同,如果會VB,那麼只要對VBA的對象比較了解,就可以編寫功能強大的VBA程序;同樣,如果不會VB,那麼,只需要了解VBA的對象就夠了,因為它比較簡單易學。
以下分別討論VBA各對象對其屬性與方法:
在一些可以包含其他對象的窗口對象中,有幾個特殊的屬性,其屬性值是當前活動對象,對它們,可以直接引用。
表1 一些特殊的屬性
對象名 含義
ActiveWorkbook 當前工作簿,即如果你打開了幾個Excel文件,那麼你當然正在編輯的Excel文件即ActiveWorkbook
ActiveSheet 當前工作簿中的當前工作表,即當前編輯的Excel文件中正在編輯的工作表
ActiveCell 當前工作表中活動單元格
ActiveChart 當前工作簿中的活動圖表
Selection 當前被選定的對象
下面詳談各對象及它們的屬性和方法
一、Application對象
此對象指Excel應用程序的工作環境。
<一>屬性
1.Caption屬性
含義:Excel應用程序標題欄顯示的文本。
舉例:Application.caption=「船員管理系統」,如賦值Empty,則恢復Excel默認的標題欄。
2.Cursor屬性
含義:Excel中滑鼠的形狀。
表2 Cursor屬性
屬性值 滑鼠形狀
xlDefault 缺少型值,滑鼠呈缺少形狀
xlWait 等待型值,滑鼠呈不斷翻轉的沙漏形狀
xlNorthwestArrow 箭頭型值,滑鼠呈標准箭頭形狀
xlIBeam 文本型值,滑鼠呈「I」字形以等待用戶輸入文本
操作:Application.Cursor=xlWait等。
3、DisplayAlerts屬性
含義:用以確定是否顯示系統的應用提示和警告信息,如果不想顯示,則把些屬性設為false,反之亦然。
4、DisplayFormulaBar屬性
含義:用以確定是否顯示公式編輯欄
5、DisplayScrollBars屬性
含義:用以確定是否顯示Excel的滾動條
6、DisplayStatusBar屬性
含義:用以確定是否顯示Excel的狀態欄
7、EnableCancelkey屬性
含義:用以確定是否允許用戶中斷正在執行著的VBA程序。預設情況下,在VBA程序執行過程中,用戶按下Ctrl+Break能夠中斷VBA程序的執行。此時此屬性即值為xlInterrupt。若要禁止中斷VBA程序,由賦值為xlDisabled;若需要VBA執行過程中遇到錯誤進中止,由賦值為xlErrorHandler
8、ScreenUpdating屬性
含義:用以確定是否顯示VBA程序的中間運算結果。
9、StatusBar屬性
含義:設置狀態欄的文本
10、ActiveWorkbook屬性
含義:如表1介紹。
11、ActiveSheet
含義:如表1介紹。
12、ActiveCell屬性
含義:如表1介紹。
13、ThisWorkBook屬性
含義:用以返回正在執行著VBA程序所在的工作簿對象。這不是當前工作簿。例如有多個工作簿打開時,ActiveWorkbook屬性返回當前工作簿對象,ThisWorkbook返回正在運行著VBA程序所在工作簿對象。
14、PathSeparator屬性
含義:返迴文件文件路徑分隔符「\」,該屬性是一個只讀屬性。
舉例:Dim strPath as String
strPath=Application.ThisWorkbook.Path&Application.PathSeperator
Workbooks.Open strPath&"myExcel.xls"
15、UserName屬性
含義:設置當前用戶名稱。預設用戶是由Excel選項對話框的「常規」選項卡中「用戶姓名」決定的。用戶可以從「工具」菜單中選擇「選項」命令來打開選項並在「常規」選項卡的「用戶姓名」文本框中重新設置預設的用戶名稱。
<二>方法
1、Calculate方法
含義:對Excel打開的工作簿中所有的公式進行重新計算。
2、Goto方法
含義:選擇工作簿中的一個Range對象或一個VBA過程,格式如下:
Application.Goto Reference,Scroll
Reference參數表示Goto方法的目的地,Scroll參數若為True,滾動條滾動以使Range對象出現在工作簿窗口左上角,為False,當前工作簿窗口不屬性變化。預設值為Galse
舉例:Application.Goto Range("C3"),True
3、InputBox方法
含義:用於打開一個輸入對話框,允許用戶輸入數據。格式如下:
Application.InputBox(prompt,title,left,top,helpFile,helpContextID,type)
prompt參數 用於設置輸入對話框的提示信息
title參數 用於設置輸入對話框的標題文字
default參數 用於設置輸入對話框的預設輸入值
left和top參數 用於設置輸入對話框左上角的坐標值
helpFile參數 用於設置輸入對話框在線幫助的名稱
helpContextID參數 用於設置輸入對話框在線幫助主題的上下文標識號
type參數 用於設置輸入對話框輸入數據的類型。預設情況下,為文本型
舉例:UserValue=Application.InputBox("請輸入數據","數據輸入",Type:=7)
4、Onkey方法
含義:按下某個或組合鍵時執行一段VBA代碼。自己嘗試一下就知道了,也可看一下VB編輯器的提示(即輸入Applicatio.Onkey後,VB編輯器彈出的下拉提示。
二、Workbooks對象集
當前所有打開的工作簿對象的集合
<一>屬性
1、Count屬性,只讀,返回Excel打開的工作簿數
<二>方法
1、Add方法,向工作簿對象集中一個新的工作簿,相當於「文件->新建」命令。格式如下:
Workbooks.Add Template
2、Open方法,打開一個指定的工作簿。格式看一下VBA編輯器中的提示就行,太累了,不想寫得這么全。
3、Close方法,關閉一個工作簿文件
三、Workbook對象
代表一個獨立的工作簿文件
<一>屬性
1、ActiveSheet屬性,返回當前工作簿中的活動工作表對象
2、Author屬性,返回或設定工作簿的作者姓名,由此確定工作簿的所有者
3、Saved屬性,用於瓢工作簿文件是否做過修改。
<二>方法
1、Activate方法,用於霜一個工作簿為當前活動工作簿,如,Workbooks("myOffice.xls").Activate
2、Close方法,用於關閉指定的工作簿
3、Save方法,用於保存指定的工作簿
4、SaveAs方法,用於另存為指定的工作簿
四、Worksheets對象集
代表當前工作簿所有的工作表(Worksheet)的集合。
<一>屬性
1、Count屬性,返回當前工作簿中的的工作表的數量
<二>方法
1、Add方法,向工作表對象集中添加一個新的工作表對象,格式如下:
Worksheets.Add Before,After,Count,Type
Before和After參數指哪一個工作表之前或之後插入新工作表。取值為Worksheet
如:Worksheets.Add Before:=Worksheets("Sheet2"),則相當於在Sheet2工作表之前插入了一個新的工作表
五、Worksheet對象
代表工作簿一個獨立的工作表。
獲取某個工作表,可以用Worksheets("辦公費用"),也可以用Worksheets(3)之類的語句
<一>屬性
1、Name屬性,設置或返回工作表對象的名稱
2、Visible屬性,確定是否隱藏某個工作表
<二>方法
1、Calculate法,對指定的工作表中的所有公式進行重新計算
2、Copy方法,用於復制指定的工作表,並放置在指定的位置,實際是一個復制與粘貼並重的函數,
格式:Worksheet-Object.Copy Before,After
如Worksheet("Sheet2").Copy After:=Worksheets("辦公費用"),相當於把Sheet2工作表復制,並把它放置在名為「辦公費用」的工作表之後
3、Move方法,移動指定的工作表並放置在指定的位置,用戶同Copy方法,區別只天於復制與剪切之不同
4、Delete方法,無參數刪除指定的工作表,如Worksheet("Sheet2").Delete
5、Cell方法,獲取指定工作表指定行列的某個單元格
格式:Worksheet-Object.Cells(Row,Col),Row,Col為整型,行列值都從1開始
如Worksheet("Sheet2").Cell(1,1),相當於獲取Sheet2工作表的第一行第一列的單元格
五、Range對象
代表一個半橋區域,可以由多個半橋組成,也可是由一個單元格組成。
引用單元格可用以下兩種方法:
一是使用單元格引用,如Range("A1"),Range("A1:C3")
二是使用單元格區域名稱,如Range("myRange")。
<一>屬性
1、FormulaR1C1屬性,為指定的單元格或單元格區域建立和存儲公式,
如Range("C5").FormulaR1C1="=SUM(R[-4]C:R[-1]C)"
2、Value屬性,為指定的單元格或單元格區域賦值,如為多個單元格,則都賦為同樣的值
3、Cell屬性,以指定的單元格為苦戰來描述被引用的單元格,把指定的單元格視為第1行第1列
格式:Range-Object.Cells(Row,Col)
4、Offset,以指定的單元格為苦戰來描述被引用的單元格,把指定的單元格視為第0行第0列
格式:Range-Object.Cells(Row,Col)
5、Name屬性,返回或設定指定的單元格或單元格區域的名稱,然後在VBA中,可以直接用名稱為引用它
6、Count屬性,返回指定的單元格區域中包含的單元格的數目,只讀
7、CurrentRegion屬性,返回以某個單元格為基點的存儲有數據的一個連結的單元格區域
<二>方法
1、Select方法方法,用於選擇指定的單元格區域,執行後,該單元格區域左上角的第一個單元格成為活動單元格
如Range("A1:C3").Select,Range("A1:C3,D5:E6,A8:E8).Select
2、Activate方法,用於選擇指定的單元格並指定其成為活動單元格,當然只有該單元格區域左上角的第一個單元格成為活動單元格。
3、AutoFit方法,調整選定的單元格區域所在行和列的行高與列寬,使其行高與列寬自動設定的最佳的高度與寬度。
如:Range("A4").CurrentRegion.Select
Selection.Rows.AutoFit
4、Clear方法,清除指定的單元格區域的內容,格式和批註,相當於「編輯->清除->全部」
如:Range("A4:C5").Clear
5、ClearContents方法,清除指定的單元格區域的內容,相當於「編輯->清除->內容」
6、ClearFormats方法,清除指定的單元格區域的內容,相當於「編輯->清除->格式」
7、ClearComments和ClearNotes方法,清除指定的單元格區域的內容,相當於「編輯->清除->批註」
8、Copy方法,將指定單元格區域中的資料庫復制到剪貼板或指定的目的單元格區域中
9、Cut方法,將指定單元格區域中的資料庫剪切到剪貼板或指定的目的單元格區域中
10、PasteSpecial方法,用於將剪貼板中復制或剪切下來的單元格區域中的資料庫有選擇地粘貼到指定的目的單元格區域中
格式:Range-Object.PasteSpecial Paste,Operation,ShipBlanks,Transpose
Paste參數規定了選擇體積類型的數據進行粘貼,如公式,內容,批註等,具體取值可參考VB編輯器中的提示
回答者: shuhua0715 - 進士出身
Ⅲ 這種情況下怎麼寫makefile:
不知道你說的是不是linux下的編程,貼一個給你參考
OMSSRC=$(OMSDIR)/source
OMSOBJDIR=$(OMSDIR)/obj
OMSBINDIR=$(OMSDIR)/bin
LIBRARY_Esql=$(INFORMIXDIR)/lib
LIBRARY_ESQLC= $(INFORMIXDIR)/lib/esql
INFXLIB_SCO= \
$(LIBRARY_ESQL)/libixasf.so \
$(LIBRARY_ESQL)/libnetstub.so \
$(LIBRARY_ESQLC)/checkapi.o \
$(LIBRARY_ESQLC)/igens07a.so \
$(LIBRARY_ESQLC)/iosls07a.so \
$(LIBRARY_ESQLC)/libixgen.so \
$(LIBRARY_ESQLC)/libixsql.so \
$(LIBRARY_ESQLC)/libixos.so \
$(LIBRARY_ESQLC)/libixgls.so \
$(LIBRARY_ESQLC)/libixglx.so
INFXLIB_AIX= -L$(LIBRARY_ESQL) -L$(LIBRARY_ESQLC) -lifsql -lifasf -lifgen -lifos -lifgls -lc -ldl -lcrypt /home/informix/lib/esql/checkapi.o -lifglx
## $(LIBRARY_ESQLC)/libixsqlshr.a \
## $(LIBRARY_ESQLC)/libixgenshr.a \
## $(LIBRARY_ESQLC)/libixosshr.a
##INFORMIX_LIB=$(INFXLIB_AIX)
INFORMIX_LIB=
UNIXLIB_SCO=-lsocket -lcurses -lpthread -lm -lrt
UNIXLIB_AIX=-lcurses -lpthread -lm -lrt
UNIX_LIB=$(UNIXLIB_AIX)
PACK_SCO=-c -O -Zp1
PACK_AIX=-c -O -qalign=packed -qcpluscmt
PACK_ARG=$(PACK_AIX)
POWER_SCO=-c -O -Zp4
POWER_AIX=-c -O -qalign=power -qcpluscmt
POWER_ARG=$(POWER_AIX)
OMSLIB=$(OMSDIR)/lib/omscomlib.a
LIBRARY_ALL= $(INFORMIX_LIB) $(UNIX_LIB) \
$(OMSLIB)
OMSINCL= -I$(OMSDIR)/incl
INCLUDEDIR= $(OMSINCL)
CFLAGS_PACK=$(PACK_ARG) $(INCLUDEDIR)
CFLAGS_POWER=$(POWER_ARG) $(INCLUDEDIR)
.SUFFIXES:
.SUFFIXES: .o .exe .bin .cbl .ec .c
.c.o:
cc $(CFLAGS_POWER) $<
mv $@ $(OMSOBJDIR)/.
.ec.o:
esql $(CFLAGS_POWER) $<
rm $*.c
mv $@ $(OMSOBJDIR)/.
.c.exe:
make $*.o
cc -o $(OMSBINDIR)/$* \
$(OMSOBJDIR)/$*.o \
$(LIBRARY_ALL)
.c.bin:
cc -o $(OMSBINDIR)/$* \
$(OMSOBJDIR)/$*.o \
$(LIBRARY_ALL)
.ec.exe:
make $*.o
cc -o $(OMSBINDIR)/$* \
$(OMSOBJDIR)/$*.o \
$(LIBRARY_ALL)
####################### Dependencies List ####################################
all: osobj \
lib
osobj:
make md5.o
make omsframe.o
lib:
rm -f $(OMSLIB)
ar vq $(OMSLIB) \
$(OMSOBJDIR)/md5.o \
$(OMSOBJDIR)/omsframe.o
chmod g+w $(OMSLIB)
Ⅳ Qt是什麼學習嵌入式會學到這個嗎
qt主要被嵌入式工程用來開發上層軟體,圖形界面
Ⅳ 現在用c語言編寫圖形界面程序(軟體)都用什麼編譯環境(工具)
在Windows 操作系統中編寫圖形用戶界面,一般都用 Visual C++(包括 Visual Studio 中的 Visual C++)。如果像樓主所說的,要用C語言,那隻能用 Windows API 函數了。如果還允許C++語言,那麼還可以用MFC(當然也可以用 Windows API 函數)。
當然,也可以不用微軟的庫,比如說用Qt之類的庫。
==========================================================
在Linux操作系統中編寫圖形用戶界面,就用gcc編譯器加上Xlib庫或者gtk庫或者Qt庫。如果允許使用C++語言,那可以用g++編譯器,上面三個庫都可以用,另外還可以用wxWidgets庫。
Ⅵ callback是什麼意思
回調函數,或簡稱回調(Callback 即call then back 被主函數調用運算後會返回主函數),是指通過參數將函數傳遞到其它代碼的,某一塊可執行代碼的引用。
這一設計允許了底層代碼調用在高層定義的子程序。
回調的用途十分廣泛。例如,假設有一個函數,其功能為讀取配置文件並由文件內容設置對應的選項。
若這些選項由散列值所標記,則讓這個函數接受一個回調會使得程序設計更加靈活:函數的調用者可以使用所希望的散列演算法,該演算法由一個將選項名轉變為散列值的回調函數實現;因此,回調允許函數調用者在運行時調整原始函數的行為。
回調的另一種用途在於處理信號或者類似物。例如一個POSIX程序可能在收到SIGTERM信號時不願立即終止;為了保證一切運行良好,該程序可以將清理函數注冊為SIGTERM信號對應的回調。
回調亦可以用於控制一個函數是否作為:Xlib允許自定義的謂詞用於決定程序是否希望處理特定的事件。
有兩種類型的回調,它們在運行時控制數據流的方式不同:阻塞回調(也稱為同步回調或僅回調)和延遲回調(也稱為非同步回調)。
在函數返回之前調用阻塞回調(在下面的 C 示例中,它說明了阻塞回調,它是函數main),則可以在函數返回後調用延遲回調。延遲回調通常用於 I/O 操作或事件處理的上下文中,並且在多個線程的情況下由中斷或不同的線程調用。
由於其性質,阻塞回調可以在沒有中斷或多線程的情況下工作,這意味著阻塞回調通常不用於同步或將工作委託給另一個線程。
回調用於在窗口系統中對應用程序進行編程。在這種情況下,應用程序提供(引用)一個特定的自定義回調函數供操作系統調用,然後操作系統調用此特定於應用程序的函數以響應滑鼠單擊或按鍵等事件。
這里的一個主要問題是許可權和安全性的管理:雖然該函數是從操作系統調用的,但它不應以與系統相同的許可權運行。這個問題的解決方案是使用保護環。
回調函數在實際中有許多作用。
假設有這樣一種情況:我們要編寫一個庫,它提供了某些排序演算法的實現(如冒泡排序、快速排序、shell排序、shake排序等等),為了能讓庫更加通用,不想在函數中嵌入排序邏輯,而讓使用者來實現相應的邏輯。
回調可用於通知機制。例如,有時要在A程序中設置一個計時器,每到一定時間,A程序會得到相應的通知,但通知機制的實現者對A程序一無所知。
那麼,就需一個具有特定原型的函數指針進行回調,通知A程序事件已經發生。實際上,API使用一個回調函數SetTimer來通知A程序。如果沒有提供回調函數,它還會把一個消息發往程序的消息隊列。
另一個使用回調機制的API函數是EnumWindow,它枚舉屏幕上所有的頂層窗口,每個窗口都可以通過它調用另一個程序提供的函數,並傳遞窗口的處理程序。例如:如果被調用者返回一個值,就繼續進行迭代;否則,退出。
EnumWindow並不關心被調用者在何處,也不關心被調用者用它傳遞的處理程序做了什麼,它只關心返回值,因為基於返回值,它將繼續執行或退出。
C語言的回調函數只能通過函數指針實現,在C++中則可以使用匿名函數(lambda)或仿函數(functor)作為回調函數。
Ⅶ 為什麼編程那麼難
這個行業的確是很難學的~~
否則那麼好學不都是bill了~~呵呵!!
你叫白痴弟弟???字幕組的?學編程比做字幕要難許多。。
數據結構一定要學好。。不要聽50573750 - 高級經理 六級 !!!他亂說
什麼C++/C都是語言!!都是外功!!!只有數據結構和演算法才識王道。。。。
聽我的~~好好學這門!!
祝你好運!!!
Ⅷ 我想知道QT和QT/E的區別在哪裡,要能圖片,順便問下,我要講演qt編程,是講程序嗎還是介紹qt就行
QT/E是經過交叉編譯的 可以跨平台移植到ARM中運行
Ⅸ C語言(DevC)中有類似於matlab中imshow的函數或庫嗎能將一個矩陣按像素點顯示出來圖像,不知勿擾,謝謝
你可以試試 koolplot 可以支持Dev Cpp的
繪制函數圖像的2D圖形庫
http://koolplot.codecutter.org/
需要有 WinBGIm (Borland BGI Graphics emulation ,模仿turbo c 的graphics 庫)
http://winbgim.codecutter.org/
Ⅹ 誰有xlib編程開發的中文電子文檔
//XButton.c
#include
#include
main()
{
Display *d;
Window w, wb;
XEvent event;
Font f;
GC gc;
d = XOpenDisplay( NULL );
w = XCreateSimpleWindow( d, RootWindow( d, 0 ),
180, 50,
260, 160,
1, WhitePixel(d, 0), BlackPixel(d, 0) );
XSelectInput( d, w, ExposureMask|ButtonPressMask );
wb = XCreateSimpleWindow( d, w,
20, 20,
100, 20,
1, WhitePixel(d, 0), BlackPixel(d, 0) );
XSelectInput( d, wb, ExposureMask|ButtonPressMask );
gc = XCreateGC( d, w, 0, 0 );
f = XLoadFont( d, "fixed" );
XSetFont( d, gc, f );
XMapWindow( d, w );
XMapWindow( d, wb );
XFlush( d );
while( 1 ){
XNextEvent( d, &event );
switch( event.type ){
case Expose:
if ( event.xany.window == wb ){
XSetForeground( d, gc, BlackPixel(d, 0) );
XFillRectangle( d, w, gc, 0, 0, 260, 160 );
XSetForeground( d, gc, WhitePixel(d, 0) );
XDrawString( d, wb, gc, 10, 10, "push", 4 );//把push換成中文例如」確 //定」?????為什麼編譯完後,執行,不能出現中文
}
break;
case ButtonPress:
if ( event.xany.window == w ){
printf( "w " );
fflush( stdout );
}
if ( event.xany.window == wb ){
printf( "wb ");
fflush( stdout );
}
break;
}
}
}