㈠ 請問這個怎麼實現哦。
C#操作xml 自己看著改吧
引用命名空間:using System.Xml
1.檢查所要操作的xml文件是否存在:
System.IO.File.Exists(文件路徑及名稱);
2.得到xml文件:
(1)在asp.net中可以這樣得到:
XmlDocument xmlDoc = new XmlDocument();
//導入xml文檔
xmlDoc.Load( Server.MapPath("xmlTesting.xml"));
//導入字元串
//xmlDoc.LoadXml("<bookStore> <book id="01" price="3.5元"> 讀者</book></bookStore>");
註:Server.MapPath("xmlTesting.xml")此時的xmlTesting.xml文件必須是在當前的解決方案里;同樣可以寫成完整的物理路徑xmlDoc.Load (@"E:"軟體學習"測試"myNoteWeb"xmlTesting.xml")
(2)在windForm中 直接用物理路徑得到所要操作的xml文件具體實現方法同上
3.創建xml文件:
XmlDocument xmlDoc = new XmlDocument(); //創建xml文檔(實例化一個xml)
XmlNode root = xmlDoc.CreateElement("bookStore");//創建根節點
//創建第1個子結點:
XmlNode bookNode = xmlDoc.CreateElement("book");
bookNode.InnerText = "讀者";
//為此節點添加屬性
法1:
bookPublishNode.SetAttribute("id", "01")
root.AppendChild(bookNode);
法2:
XmlAttribute xmlattribute = tempXmlDoc.CreateAttribute("price");
xmlattribute.Value = "3.5元";
tempRoot .Attributes .Append (xmlattribute )
//創建第2個根節點的子結點:
XmlNode tempBookNode = xmlDoc.CreateElement("tempbook ");
tempBookNode.InnerText ="文摘";
root.AppendChild(tempBookNode);
xmlDoc.AppendChild(root); //將根節點添加到xml文檔中
try
{
xmlDoc.save(「bookInfo.xml」);//xml將保存到當前解決方案的目錄下
}
catch (Exception ex)
{
MessageBox.Show(ex.Message); //顯示錯誤信息
}
得到的xml文檔如下:
<?xml version="1.0" encoding="utf-8" ?>
<bookStore>
<book id ="01" price="3.5元">
讀者
</book>
<tempbook id ="02">
文摘
</tempbook >
</bookStore>
4.讀取,修改xml信息
tempTesting.xml文件的內容如下:
?<?xml version="1.0" encoding="utf-8"?>
<bookStore>
<book id="01" price="3.5元">
讀者
</book>
<book id="02" price="5元">
<bookname>百家講壇</bookname>
<bookpublish>文學出版社</bookpublish>
</book>
<tempbook id="0000">漫畫tempbook>
</bookStore>
(1) 得到xml文件的xml信息
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load( Server.MapPath("xmlTesting.xml"));
XmlNode root=xmlDoc.DocumentElement;
(2) 得到節點
//得到id為2book節點下的所有節點
XmlNodeList xmlNodes = root.SelectNodes("//book[@id='02']//*");
XmlNode tempNode = xmlNodes[0];//得到第一個節點
//將tempbook強制轉化為XmlElement
XmlElement xmlelement = (XmlElement)root.SelectSingleNode("tempbook");
(3) 修改節點內容
XmlNode tempBook = root.SelectSingleNode("tempbook");//修改節點內容
tempBook. InnerText="漫畫";
(4)得到節點的屬性值並修改:
//得到節點的屬性
//法1
XmlAttributeCollection attrbute= tempBook.Attributes;
string bookID = attrbute[0].Value;
//法2:
string bookid = tempBook.Attributes[0].Value.ToString();
//修改節點屬性的值
tempBook.Attributes[0].Value = "0000";
(5)添加一個根節點
XmlNode node = xmlDoc.CreateElement("testing");
node.InnerText = "testing";
root.AppendChild(node);
(6)保存修改後的文檔
xmlDoc.Save(Server.MapPath("tempTesting.xml"));
******其他:
(一)顯示xml信息
1以xml文檔的樣式顯示:xmlDoc.outerxml;
2.顯示各個節點
XmlNode root = xmlDoc.DocumentElement;//得到根節點:
if (root.ChildNodes.Count > 0)
{
XmlNode xmlnode = root.FirstChild;//得到子結點:
for (int i = 0; i < root.ChildNodes.Count; i++)
{
MessageBox.Show(xmlnode.FirstChild .InnerText);
xmlnode = xmlnode.NextSibling;或mlNode subNode2 = root.LastChild;
}
}
else
MessageBox.Show("沒有內容!");
(二)將資料庫的信息導入為xml
XmlDocument xmlDocItem = new XmlDocument();
DataSet ds = GetDataSet(strtsql);//調用方法從資料庫中得到DataSet。
xmlDocItem.LoadXml(ds .GetXml ());//導入xml中;
*****************************以下是在網路上找到的關於C#操作xml文件的總結***
一:創建並保存xml文件
string FileName =Application.StartupPath+"""phone.xml";
XmlTextWriter objXmlTextWriter = new XmlTextWriter(FileName,Encoding.Default);
objXmlTextWriter.Formatting = Formatting.Indented;
objXmlTextWriter.Indentation = 6;
objXmlTextWriter.WriteStartDocument();
objXmlTextWriter.WriteStartElement("", "PhoneBook", "");
objXmlTextWriter.WriteStartElement("", "Name", "");
objXmlTextWriter.WriteString("加菲爾德");
objXmlTextWriter.WriteEndElement();
objXmlTextWriter.WriteStartElement("", "Number", "");
objXmlTextWriter.WriteString("5555555");
objXmlTextWriter.WriteEndElement();
objXmlTextWriter.WriteStartElement("", "City", "");
objXmlTextWriter.WriteString("紐約");
objXmlTextWriter.WriteEndElement();
objXmlTextWriter.WriteStartElement("", "DateOfBirth", "");
objXmlTextWriter.WriteString("26/10/1978");
objXmlTextWriter.WriteEndElement();
objXmlTextWriter.WriteEndElement();
objXmlTextWriter.WriteEndDocument();
objXmlTextWriter.Flush();
objXmlTextWriter.Close();
這段代碼在win2003ser+vs2005環境下測試通過,出來的效果很好,也比較容易理解,我一般就是用這段代碼創建XML文件。
二、讀取、修改XML文件的某個節點的值
string path = "phone.xml";
XmlDocument doc = new XmlDocument();
doc.Load(path);
//讀所有節點表
XmlNamespaceManager xnm = new XmlNamespaceManager(doc.NameTable);
//讀取節點值
XmlNode node = doc.SelectSingleNode("/PhoneBook/Name", xnm); //node.InnerText 就是讀取出來的值
//修改節點值
node.InnerText="要修改的內容";
//保存修改後的內容
doc.Save(path);
㈡ 請問蘭花葉子上出現白點是什麼病
長蟲了,介殼蟲病。
介殼蟲是半翅目,蚧總科昆蟲的總稱。根據蚧蟲網(Scalenet,2014)的統計,現已被描述的介殼蟲種類超過7500種[1]。大多數種類蟲體上備有蠟質分泌物,形如介殼,介殼蟲也因此而得名。介殼蟲是花卉和果樹上最常見的害蟲,常群集於枝、葉、果上,吸取植物汁液為生,嚴重時會造成枝條凋萎或全株死亡。此外,介殼蟲的分泌物還能誘發煤污病,危害極大。常見的有吹綿蚧、樟蚌圓盾蚧、糠片蚧、朝鮮球堅蚧、桑白蚧、康氏粉蚧、扶桑綿粉蚧等。
防治方法:
(一)植物檢疫
介殼蟲常固著寄生,蟲體微小,主要靠寄主枝條、接穗、果品甚至樹干攜帶而遠距離傳播。因此,對苗木、接穗和果品的采購、調運過程和保護區都應實施檢疫,以防傳播蔓延。
(二)農業防治
加強果園管理,及時中耕鬆土、施肥和灌水,滿足果樹對水肥的需要,可增強樹勢,提高果樹抗蟲能力。結合整形修剪,把帶蟲的枝條集中燒毀,可大大減少蟲口數量。
(三)生物防治
保護利用自然天敵,實施生物防治是控制介殼蟲種群數量的有效途徑。各地都有一些保護利用自然天敵,控制介殼蟲危害的成功經驗,應注意總結推廣,如瓢蟲是介殼蟲的主要捕食性天敵,通過提供庇護場所或人工助遷、釋放澳洲瓢蟲、大紅瓢蟲和黑緣紅瓢蟲等,可有效防治吹綿蚧、草履蚧的危害。介殼蟲的寄生蜂、寄生菌種類也十分豐富,如日光蜂是防治梨圓蚧的有效天敵,已成為國際上引種利用的對象,應進一步加強研究。此外,在採用其它防治措施,特別是進行化學防治時,盡可能避免殺傷天敵。
(四)物理和機械防治
抓住介殼蟲生命活動中的2個薄弱環節,採用物理、機械的方法,可以起到事半功倍的防治效果。首先,介殼蟲營固著生活,很少活動,在新傳入區常常只在局部植株或枝條上發生,及時採取拔株、剪枝、刮樹皮或刷除等措施,便可收到顯著的效果,如梨圓蚧傳入新疆霍城、伊寧數年後,僅在局部棗園發生,由於當地棗樹苗低矮,栽培間距大,蚧蟲只集中在少數植株上發生,採取拔除燒毀措施,收到了徹底的防治效果。其次,介殼蟲短距離擴散蔓延主要靠初孵若蟲爬行,此時採用枝幹塗粘蟲膠或其它阻隔方法,可阻止擴散,消滅絕大部分若蟲。粘膠用10份松香、8份蓖麻油和0.5份石蠟配製而成,將它們按比例混在一起,加熱溶化後即可使用,粘性一般可維持15天左右。對於草履蚧亦可採用樹根附近挖坑的方法,把其消滅在樹下。
(五)化學防治
1、休眠期防治 在果樹休眠期,噴灑3~5.5°Bé石硫合劑,3%~5%柴油ES或5%~6%煤焦油ES,對介殼蟲有較好的防治效果,並可兼治蚜蟲和葉蟎。
2、生長期防治 應抓住2個關鍵防治時期,初齡若蟲爬動期或雌成蟲產卵前是第1個防治適期, 卵孵化盛期是第2個防治適期,選用低毒的選擇性殺蟲劑進行防治。如「邯科140」1000倍液、毒死蜱600倍液、催殺800倍液等。
㈢ 如何識別蘭花優劣
蘭花的鑒賞標准
大千世界,蘭花眾多,栽培歷史悠久,品種豐富。對於蘭花的品賞標准,受地域或個人的偏好而不同。一般藝蘭者對於所養蘭花,只要花開時有香味,便認為是好蘭,謂之取其香。有些地區的藝蘭者,唯愛傳統名品,認為只是有名的老種,才稱得上是好蘭,謂之取其名。有些地區的藝蘭者,不管瓣型、葉型如何,認為只有素心者是好蘭,謂之取其素。有些地區的藝蘭者,只要花的色彩奇特而豐富,就稱得上好蘭,謂之取其艷。有些地區的藝蘭者則不太重視花的瓣型,偏重於矮種或葉的長度、寬度、彎垂對比度,尤其重視葉帶有顏色,謂之取其奇。有些地區的藝蘭者,則偏重於原生種、下山新品的發掘,謂之取其新。有的蘭花葉片晶瑩透亮,成為人們追求的蘭花貴族???水晶蘭。
那麼究竟什麼樣的蘭花,才稱得上是好蘭呢?以我之見,評價一個蘭花品種的優劣主要按色、型、奇、香、素、韻六字順序排列,若具其中一二,皆為可取。
「色」就是指花的色彩鮮艷而俏麗。對一株蘭花來說,花色與葉色的對比度越大,觀賞價值也就越高,故「色」是第一位的品賞標准。
「型」一般是指花的傳統欣賞標准,梅型瓣、梅瓣、荷型瓣、荷瓣、荷形水仙瓣、梅型水仙瓣、柳葉瓣,有關這類瓣型的理論的文章已是屢見不鮮了。
除此之外,如寒蘭的線型瓣,春蘭與四季蘭中的蝶化瓣和蝶型瓣,也應當列入「型」的品賞標准之中,故「型」是一個重要的品賞標准。
「奇」一是指花瓣的數量、形狀、色彩非同尋常,奇特如唇瓣,都屬名貴。二是指葉色奇,如葉片帶有黃、白鑲邊,或整個葉面黃白綠相間等,也都屬名品。葉面帶黃、白鑲邊的品種,海外蘭界稱為「藝蘭」。據有些專家講,蘭花綠葉出現黃、白鑲邊的機會僅有萬分之一。因而凡葉片帶有其它顏色的都屬名貴品種。另還有螺旋葉、縐葉、蛤蟆葉、矮種圓頭葉等,故「奇」也是當今品賞國蘭的又一個重要標准。
「香」是指國蘭獨具的幽香。蘭花香氣是任何植物的香氣都不能相比的,也是有史以來人類愛蘭、養蘭的主要原因之一。日本人把蘭之香比作龍之睛,說蘭無香就好似龍無睛。我國蘭花冰清玉潔,幽香襲人。可見蘭之香氣是必不可少的品賞標准。
因素蘭甚多,「素」則排列至第五位。這是指蘭花的唇瓣具有單一顏色(以白、綠、黃舌為多,全紅舌根極少)。素蘭之所以名貴,原因有三:其一,能表現蘭的氣節,就是人們常說的蘭花不以無人而不芳,不以艷麗取寵。而彩唇瓣的蘭,就顯不出蘭的純潔。其二,物以稀為貴,因為素心蘭要比彩心蘭少得多,在各類蘭花中,建蘭素心最多,其次是春蘭,再次是蕙蘭,更次是墨蘭,寒蘭中素心最少。一般來說素心建蘭的價值低於其它素心。其三,素唇蘭也具有奇的特徵。
「韻」就是指蘭花具有整體的姿態韻律美。也是美學理論中所說的協調即是美。如果前述五項品賞標准,能集中體現,當然屬至高品位,價值連城,但由於自然界的變化無窮,故常言「金無足赤」,要想面面俱到是不可能的。若能在五項標准中具備一二,或二三,也就讓欣賞者知足了。故也可以說,「韻」是一項綜合性品評鑒賞標准,盡管它會受到個人偏好、文化層次、藝術修養等諸多因素制約,但美畢竟是客觀存在的。
總而言之,對於國蘭品種的品評與鑒賞,用得著中國一句老話,就是「物以稀為貴」。民間很早就有「千梅萬世選,一荷無處求」之說。故一般荷瓣的蘭花又比梅瓣、水仙瓣等瓣型蘭花更受推崇。
㈣ git 在使用拉取、推送(pull或push)時時候會出現這樣的錯誤提示
d:Program Files (x86)Git/libexec/git-coregit-pull:line 268:/bin/tr:Bad file number
Your configuration specifies to merge with the ref 'master' 是不是你的代碼有未提交的更新呀?你修改文件後如果沒有提交push,那麼你在pull的時候就會報錯的,會讓你先提交或者merge合並文件
【拓展資料】
git pull origin 拉取代碼到本地,解決拉取代碼時發生的文件沖突:
1)拉取(下載)指定分支代碼合並到當前分支:
相當於指定分支的代碼與當前分支的代碼合並到了一起。
命令:git pull origin分支名稱
注意:
每次使用該命令前,需要保證本地工作區是沒有任何修改代碼的,也就是說需要將本地工作區編輯過的文件添加到暫存區(git add .),或提交到本地倉庫中(git commit),才可以使用該命令拉取指定分支的代碼合並到當前分支中。
每次在操作完git commit命令後,必須拉取一下master分支代碼,保持本地正在開發功能邏輯的代碼分支代碼是最新的,避免後續在提交時沖突過多或覆蓋掉其他人的代碼的問題出現。
如果我們需要將master主幹分支的代碼拉取並與我們當前分支(xuzhangzheng2)的代碼進行合並的話,可以使用該命令。效果如圖:
中間的======是用於分割本地變更和遠程倉庫中的變更的,也就是說出現沖突時,如圖,使用======把沖突的部分分割成2塊。
上面的是本地修改變更的內容,以<<<<<<<HEAD開頭。
下面的是遠程倉庫修改變更的內容,以>>>>>>>版本號 結尾。
版本號,也就是示例中的,即為提交的版本號,使用該版本號可以在gitlab中找到提交記錄,從而方便查詢其他同事在對同文件進行修改時,都修改了哪些內容,便於進解決沖突。
解決方法:
根據實際業務場景,將本地修改變更的部分和遠程倉庫中修改變更的部分進行合並,留下滿足業務邏輯的代碼即可(若團隊開發期間,出現沖突時,建議找到相關同事進行溝通,確保自己解決沖突的方法不會影響到其他人編寫的功能),同時將上面提到的沖突標識刪除掉,不然無法通過語法檢查和編譯。
同時建議使用全文件內容搜索<<<<<<<或======或>>>>>>>,將所有有沖突的地方一一進行解決,保重提交的代碼是可運行,沒有問題的。
解決沖突後,若需要提交代碼的話,需先將代碼使用git add .存入緩存區,或直接使用git commit –am 「本次提交描述」 或git commit –a –m 「本次提交描述」將代碼提交至本地倉庫區,同時再次拉取制定分支的最新代碼,確保本次的代碼時刻都是最新的,再進行接下來的推送代碼至遠程倉庫操作。
㈤ java.lang.ClassNotFoundException 這是怎麼回事
ClassNotFound說明你少包了,找不對對應的class文件啊,應該是jar包里又引用了其它的jar包,所以導致報這個錯.
㈥ 如何辨別蘭花品種的優劣
我國人民傳統喜愛的蘭花是蘭科蘭屬中的一些一地生蘭,花比較小,色淡素,有幽香。這與歐美人士要求蘭花花大、色艷完全不同。我國各地人民對蘭花的喜好不盡相同,但對蘭花香氣的要求是一致的。蘭花有清香,一枝在室,滿目飄香,素有"香祖"、"國香"、"天下第一香"之稱。就香氣而論,以春蘭最醇,蕙蘭、劍蘭次之,建蘭、琴蘭又次之,墨蘭香氣較差。在花色上以清雅淡素(素心)為主,白色花被的蘭花稱為素心蘭,被視為珍品;如春蘭中的綠雲、文團素、雲南大雪素等,春劍素等,建蘭中之玉枕、鳳尾素,墨蘭中的白墨等是。對花形,在江浙江帶講究萼片、花瓣的形態和排列形式,以梅瓣、荷瓣、水仙瓣為良佳。有部分人對蘭花的葉片,特感興趣,認為"觀葉勝看花"。尤其對彎曲下垂,婀娜多姿,微風一過,一搖三擺更為欣賞。最近對蘭葉有白色或黃色線條的線藝蘭,視為珍品。
欣賞蘭花涉及到美學
㈦ 中國蘭花與洋蘭的異同點
不管是洋蘭還是國蘭,它們均屬於蘭科的多年生草本植物,通常具有蘭科植物的共有特徵,例如假鱗莖、質厚堅韌的葉片和具有唇瓣的兩側對稱花等。所不同的是,洋蘭通常開有色彩艷麗的較大花朵,而且大部分為氣生的附生蘭;而國蘭則開有幽香的小型花朵,花色以素雅或淡色為主,花朵的外形變化多端,什麼牡丹瓣、蝶瓣、荷瓣、梅瓣、水仙瓣、菊瓣都會出現在同一個種之內,形成了不同類別的花藝品種。除了形形色色的花藝品種外,國蘭還有不少葉片出現黃、白色線藝的葉藝品種。以觀賞的角度來看,洋蘭代表了一種西方文化的現代美,而國蘭則體現了東方文化的古典美。故當今養蘭人群也可大致分成喜歡艷麗的洋蘭一族和喜歡幽雅芳香的國蘭一族。
㈧ 關於期權和行權的問題
1、這是公司內部的期權,具體行權方式應該問你們人士或者薪酬委員會或者領導,從你提供的資料上來看,公司分給了你一共18000份的期權,這個權力讓你可以以0.5USD的價格購買公司股份,從2018~2021年每年的4月1日都可進行4500份期權的行權(或這一日之前,這一點在圖上看不出);
2、你的是買入期權,賣出期權只在二級資本市場上存在;
3、對的,要麼行權,要麼放棄,這個期權是給你一個機會能夠以優惠的價格獲得公司股份;
4、首先要行權,行權之後獲得公司股份,然後可以轉讓公司股份,甚至可以等到公司上市之後變現,但這一切都取決於公司的經營情況;
5、行權之後期權就消失了,你獲得了股份,但如果離職的話,股份的去留情況要看你和公司的合同;
6、行權的費用在第1點里已經說了,每份0.5USD;
7、期權的價值在於標的股份的價值,比如公司運營的不好了,每股股票價格只有0.4USD了,這時候就可以放棄行權,因為沒有人會花0.5USD去買一股價格為0.4USD的股票,但只要你行權了,期權就消失,你手上就變成了股份,這股份值不值錢依然是看公司的運營情況;
8、公司不上市,期權未必沒價值,因為股份的價值不一定要上市才會體現,上市只是增加了估值的公允性和流動性,但如果倒閉了,那這些股份就不值錢了,請注意我說的一直是股份,因為期權在行權或者放棄之後都是消失的
綜上,請一定記住期權只是一種權力,你們公司給你提供的期權權利金是固定的,你也無法轉讓這些權力,所以你需要關心的只是你們公司的具體運營情況,然後判斷自己是否需要行權
㈨ 求用vc++編程實現顯示灰度直方圖的詳細步驟,越詳細越好
步驟和程序:
打開VC程序——文件——新建——工程中的MFC AppWizard(exe),在工程下面的框中輸入工程名(假定工程名為111),點確定——選多重文檔,點下一個——後面都點下一個直到完成確定,基本框架就完成了,下面就加代碼。
這時VC界面上左邊框的下面有三個按鈕:ClassView、ResourceView和FileView,ClassView裡面是工程111的類:CAdoutDlg、CChildFrame、CMy111App、CMy111Doc、CMy111View和Globals;點ResourceView裡面是資源類:Accelerator、Dialog、Icon、Menu、String Table、Toolbar和Version;點開FileView裡面是文件類:Source File、Header Files、Resource Files和ReadMe.txt。
點界面的「工程」按鈕——添加工程——新建——選C++ Source File,在文件下面的框里輸入文件名(如DIBAPI),點「結束」,這樣在FileView中的Source Files裡面就多了一個DIBAPI.cpp文件,所有的代碼都加在該文件中。再點界面的「工程」按鈕——添加工程——新建——選C/C++ Header File,在文件下面的框里輸入文件名(和前面的文件名必須一致),點「結束」,這樣在FileView中的Header Files裡面就多了一個DIBAPI.h文件,該文件是DIBAPI.cpp的頭文件。
點開DIBAPI.h文件,裡面是空白的,把如下代碼考入文件中:
//DIBAPI.h
#ifndef _INC_DIBAPI
#define _INC_DIBAPI
DECLARE_HANDLE(HDIB);
#define PALVERSION 0x300
#define IS_WIN30_DIB(lpbi) ((*(LPDWORD)(lpbi))==sizeof(BITMAPINFOHEADER))
#define RECTWIDTH(lpRect) ((lpRect)->right-(lpRect)->left)
#define RECTHEIGHT(lpRect) ((lpRect)->bottom-(lpRect)->top)
#define WIDTHBYTES(bits) (((bits)+31)/32*4)
#define DIB_HEADER_MARKER ((WORD)('M'<<8)|'B')
BOOL WINAPI PaintDIB(HDC,LPRECT,HDIB,LPRECT,CPalette* pPal);
BOOL WINAPI CreateDIBPalette(HDIB hDIB,CPalette* cPal);
LPSTR WINAPI FindDIBBits(LPSTR lpbi);
DWORD WINAPI DIBWidth(LPSTR lpDIB);
DWORD WINAPI DIBHeight(LPSTR lpDIB);
WORD WINAPI PaletteSize(LPSTR lpbi);
WORD WINAPI DIBNumColors(LPSTR lpbi);
HGLOBAL WINAPI CopyHandle(HGLOBAL h);
BOOL WINAPI SaveDIB(HDIB hDib,CFile& file);
HDIB WINAPI ReadDIBFile(CFile& file);
//在此處輸入自己的函數聲明
#endif//!_INC_DIBAPI
上面這些函數是實現圖像的讀取、存儲等圖像處理的基本功能的,你將自己需要的函數也輸入到「//在此處輸入自己的函數聲明」的下面。
點開DIBAPI.cpp文件,裡面是空白的,將如下代碼加入其中:
//DIBAPI.cpp
#include "stdafx.h"
#include "DIBAPI.h"
WORD WINAPI DIBNumColors(LPSTR lpbi)
{
WORD wBitCount;
if(IS_WIN30_DIB(lpbi))
{
DWORD dwClrUsed;
dwClrUsed=((LPBITMAPINFOHEADER)lpbi)->biClrUsed;
if(dwClrUsed)
return (WORD)dwClrUsed;
}
if(IS_WIN30_DIB(lpbi))
wBitCount=((LPBITMAPINFOHEADER)lpbi)->biBitCount;
else
wBitCount=((LPBITMAPCOREHEADER)lpbi)->bcBitCount;
switch(wBitCount)
{
case 1:
return 2;
case 4:
return 16;
case 8:
return 256;
default:
return 0;
}
}
WORD WINAPI PaletteSize(LPSTR lpbi)
{
if(IS_WIN30_DIB(lpbi))
return (WORD)(DIBNumColors(lpbi)*sizeof(RGBQUAD));
else
return (WORD)(DIBNumColors(lpbi)*sizeof(RGBTRIPLE));
}
LPSTR WINAPI FindDIBBits(LPSTR lpbi)
{
return (lpbi+*(LPDWORD)lpbi+::PaletteSize(lpbi));
}
DWORD WINAPI DIBWidth(LPSTR lpDIB)
{
LPBITMAPINFOHEADER lpbmi;
LPBITMAPCOREHEADER lpbmc;
lpbmi=(LPBITMAPINFOHEADER)lpDIB;
lpbmc=(LPBITMAPCOREHEADER)lpDIB;
if(IS_WIN30_DIB(lpDIB))
return lpbmi->biWidth;
else
return (DWORD)lpbmc->bcWidth;
}
DWORD WINAPI DIBHeight(LPSTR lpDIB)
{
LPBITMAPINFOHEADER lpbmi;
LPBITMAPCOREHEADER lpbmc;
lpbmi=(LPBITMAPINFOHEADER)lpDIB;
lpbmc=(LPBITMAPCOREHEADER)lpDIB;
if(IS_WIN30_DIB(lpDIB))
return lpbmi->biHeight;
else
return (DWORD)lpbmc->bcHeight;
}
BOOL WINAPI PaintDIB(HDC hDC,LPRECT lpDCRect,HDIB hDIB,LPRECT lpDIBRect,CPalette* pPal)
{
LPSTR lpDIBHdr;
LPSTR lpDIBBits;
BOOL bSuccess=FALSE;
HPALETTE hPal=NULL;
HPALETTE hOldPal=NULL;
if(hDIB==NULL)
return FALSE;
lpDIBHdr=(LPSTR)::GlobalLock((HGLOBAL)hDIB);
lpDIBBits=FindDIBBits(lpDIBHdr);
if(pPal!=NULL)
{
hPal=(HPALETTE)pPal->m_hObject;
hOldPal=::SelectPalette(hDC,hPal,TRUE);
}
::SetStretchBltMode(hDC,COLORONCOLOR);
if((RECTWIDTH(lpDCRect)==RECTWIDTH(lpDIBRect))&&(RECTHEIGHT(lpDCRect)==RECTHEIGHT(lpDIBRect)))
{
bSuccess=::SetDIBitsToDevice(hDC,lpDCRect->left,lpDCRect->top,RECTWIDTH(lpDCRect),RECTHEIGHT(lpDCRect),lpDIBRect->left,\
(int)DIBHeight(lpDIBHdr)-lpDIBRect->top-RECTHEIGHT(lpDIBRect),0,(WORD)DIBHeight(lpDIBHdr),\
lpDIBBits,(LPBITMAPINFO)lpDIBHdr,DIB_RGB_COLORS);
}
else
{
bSuccess=::StretchDIBits(hDC,lpDCRect->left,lpDCRect->top,RECTWIDTH(lpDCRect),RECTHEIGHT(lpDCRect),lpDIBRect->left,\
lpDIBRect->top,RECTWIDTH(lpDIBRect),RECTHEIGHT(lpDIBRect),\
lpDIBBits,(LPBITMAPINFO)lpDIBHdr,DIB_RGB_COLORS,SRCCOPY);
}
::GlobalUnlock((HGLOBAL)hDIB);
if(hOldPal)
::SelectPalette(hDC,hOldPal,TRUE);
GlobalUnlock(hDIB);
return bSuccess;
}
BOOL WINAPI CreateDIBPalette(HDIB hDIB,CPalette* pPal)
{
LPLOGPALETTE lpPal;
HANDLE hLogPal;
HPALETTE hPal=NULL;
LPSTR lpbi;
LPBITMAPINFO lpbmi;
LPBITMAPCOREINFO lpbmc;
BOOL bWinStyleDIB;
int i;
WORD wNumColors;
BOOL bResult=FALSE;
if(hDIB==NULL)
return FALSE;
lpbi=(LPSTR)::GlobalLock((HGLOBAL)hDIB);
lpbmi=(LPBITMAPINFO)lpbi;
lpbmc=(LPBITMAPCOREINFO)lpbi;
wNumColors=DIBNumColors(lpbi);
bWinStyleDIB=IS_WIN30_DIB(lpbi);
if(wNumColors!=0)
{
hLogPal=::GlobalAlloc(GHND,sizeof(LOGPALETTE)+sizeof(PALETTEENTRY)*wNumColors);
if(hLogPal==0)
{
::GlobalUnlock((HGLOBAL)hDIB);
return FALSE;
}
lpPal=(LPLOGPALETTE)::GlobalLock(hLogPal);
lpPal->palVersion=PALVERSION;
lpPal->palNumEntries=(WORD)wNumColors;
bWinStyleDIB=IS_WIN30_DIB(lpbi);
for(i=0;i<(int)wNumColors;i++)
{
if(bWinStyleDIB)
{
lpPal->palPalEntry[i].peRed=lpbmi->bmiColors[i].rgbRed;
lpPal->palPalEntry[i].peGreen=lpbmi->bmiColors[i].rgbGreen;
lpPal->palPalEntry[i].peBlue=lpbmi->bmiColors[i].rgbBlue;
lpPal->palPalEntry[i].peFlags=0;
}
else
{
lpPal->palPalEntry[i].peRed=lpbmc->bmciColors[i].rgbtRed;
lpPal->palPalEntry[i].peGreen=lpbmc->bmciColors[i].rgbtGreen;
lpPal->palPalEntry[i].peBlue=lpbmc->bmciColors[i].rgbtBlue;
lpPal->palPalEntry[i].peFlags=0;
}
}
bResult=pPal->CreatePalette(lpPal);
::GlobalUnlock((HGLOBAL)hLogPal);
::GlobalFree((HGLOBAL)hLogPal);
}
::GlobalUnlock((HGLOBAL)hDIB);
return bResult;
}
HGLOBAL WINAPI CopyHandle(HGLOBAL h)
{
if(h==NULL)
return NULL;
DWORD dwLen=::GlobalSize((HGLOBAL)h);
HGLOBAL hCopy=::GlobalAlloc(GHND,dwLen);
if(hCopy!=NULL)
{
void* lpCopy=::GlobalLock((HGLOBAL)hCopy);
void* lp=::GlobalLock((HGLOBAL)h);
memcpy(lpCopy,lp,dwLen);
::GlobalUnlock(hCopy);
::GlobalUnlock(h);
}
return hCopy;
}
BOOL WINAPI SaveDIB(HDIB hDib,CFile& file)
{
BITMAPFILEHEADER bmfHdr;
LPBITMAPINFOHEADER lpBI;
DWORD dwDIBSize;
if(!hDib)
return FALSE;
lpBI=(LPBITMAPINFOHEADER)::GlobalLock((HGLOBAL)hDib);
if(lpBI==NULL)
return FALSE;
if(!IS_WIN30_DIB(lpBI))
{
::GlobalUnlock((HGLOBAL)hDib);
return FALSE;
}
bmfHdr.bfType=DIB_HEADER_MARKER;
dwDIBSize=*(LPDWORD)lpBI+::PaletteSize((LPSTR)lpBI);
if((lpBI->biCompression==BI_RLE8)||(lpBI->biCompression==BI_RLE4))
dwDIBSize+=lpBI->biSizeImage;
else
{
DWORD dwBmBitsSize;
dwBmBitsSize=WIDTHBYTES((lpBI->biWidth)*((DWORD)lpBI->biBitCount))*lpBI->biHeight;
dwDIBSize+=dwBmBitsSize;
lpBI->biSizeImage=dwBmBitsSize;
}
bmfHdr.bfSize=dwDIBSize+sizeof(BITMAPFILEHEADER);
bmfHdr.bfReserved1=0;
bmfHdr.bfReserved2=0;
bmfHdr.bfOffBits=(DWORD)sizeof(BITMAPFILEHEADER)+lpBI->biSize+::PaletteSize((LPSTR)lpBI);
TRY
{
file.Write((LPSTR)&bmfHdr,sizeof(BITMAPFILEHEADER));
file.WriteHuge(lpBI,dwDIBSize);
}
CATCH(CFileException,e)
{
::GlobalUnlock((HGLOBAL)hDib);
THROW_LAST();
}
END_CATCH
::GlobalUnlock((HGLOBAL)hDib);
return TRUE;
}
HDIB WINAPI ReadDIBFile(CFile& file)
{
BITMAPFILEHEADER bmfHeader;
DWORD dwBitsSize;
HDIB hDIB;
LPSTR pDIB;
dwBitsSize=file.GetLength();
if(file.Read((LPSTR)&bmfHeader,sizeof(bmfHeader))!=sizeof(bmfHeader))
return NULL;
if(bmfHeader.bfType!=DIB_HEADER_MARKER)
return NULL;
hDIB=(HDIB)::GlobalAlloc(GMEM_MOVEABLE|GMEM_ZEROINIT,dwBitsSize);
if(hDIB==0)
return NULL;
pDIB=(LPSTR)::GlobalLock((HGLOBAL)hDIB);
if(file.ReadHuge(pDIB,dwBitsSize-sizeof(BITMAPFILEHEADER))!=dwBitsSize-sizeof(BITMAPFILEHEADER))
{
::GlobalUnlock((HGLOBAL)hDIB);
::GlobalFree((HGLOBAL)hDIB);
return NULL;
}
::GlobalUnlock((HGLOBAL)hDIB);
return hDIB;
}
//在此處輸入自己的函數定義
上面是DIBAPI.h頭文件中聲明的函數的定義,你將自己的函數定義加到「//在此處輸入自己的函數定義」後面。
下面加相應的消息映射函數,點Ctrl+W鍵,會出現MFC ClassWizard對話框,點Message Maps,在Class name下面的框中選擇CMy111Doc,在Messages裡面選中OnOpenDocument,然後點擊Add Function按鈕就加入了相應的消息映射函數,同樣的方法以此加入OnSaveDocument、DeleteContents、CanCloseFrame相應的消息函數,點「確定」即可。
點開111Doc.cpp文件,裡面有相應的消息映射函數定義位置,在函數CMy111Doc::CMy111Doc()里輸入以下代碼:
m_refColorBKG=0x00808080;
m_hDIB=NULL;
m_palDIB=NULL;
m_sizeDoc=CSize(1,1);
在函數CMy111Doc::~CMy111Doc()里輸入以下代碼:
if(m_hDIB!=NULL)
::GlobalFree((HGLOBAL)m_hDIB);
if(m_palDIB!=NULL)
delete m_palDIB;
在函數BOOL CMy111Doc::OnOpenDocument(LPCTSTR lpszPathName)里/ TODO: Add your specialized creation code here下面添加如下代碼:
CFile file;
CFileException fe;
if(!file.Open(lpszPathName,CFile::modeRead|CFile::shareDenyWrite,&fe))
{
ReportSaveLoadException(lpszPathName,&fe,FALSE,AFX_IDP_FAILED_TO_OPEN_DOC);
return FALSE;
}
DeleteContents();
BeginWaitCursor();
TRY
{
m_hDIB=::ReadDIBFile(file);
}
CATCH(CFileException,eLoad)
{
file.Abort();
EndWaitCursor();
ReportSaveLoadException(lpszPathName,eLoad,FALSE,AFX_IDP_FAILED_TO_OPEN_DOC);
m_hDIB=NULL;
return FALSE;
}
END_CATCH
InitDIBData();
EndWaitCursor();
if(m_hDIB==NULL)
{
CString strMsg;
strMsg="讀取圖像時出錯!可能是不支持該類型的圖像文件!";
MessageBox(NULL,strMsg,NULL,MB_ICONINFORMATION|MB_OK);
return FALSE;
}
SetPathName(lpszPathName);
SetModifiedFlag(FALSE);
在函數BOOL CMy111Doc::OnSaveDocument(LPCTSTR lpszPathName)里// TODO: Add your specialized code here and/or call the base class後面添加如下代碼:
CFile file;
CFileException fe;
if(!file.Open(lpszPathName,CFile::modeCreate|CFile::modeReadWrite|CFile::shareExclusive,&fe))
{
ReportSaveLoadException(lpszPathName,&fe,TRUE,AFX_IDP_INVALID_FILENAME);
return FALSE;
}
BOOL bSuccess=FALSE;
TRY
{
BeginWaitCursor();
bSuccess=::SaveDIB(m_hDIB,file);
file.Close();
}
CATCH(CException,eSave)
{
file.Abort();
EndWaitCursor();
ReportSaveLoadException(lpszPathName,eSave,TRUE,AFX_IDP_FAILED_TO_SAVE_DOC);
return FALSE;
}
END_CATCH
EndWaitCursor();
SetModifiedFlag(FALSE);
if(!bSuccess)
{
CString strMsg;
strMsg="無法保存BMP圖像";
MessageBox(NULL,strMsg,NULL,MB_ICONINFORMATION|MB_OK);
}
點開ClassView,右鍵點擊CMy111Doc類,點Add Member Variable出現添加成員變數對話框,在Variable Type下的框中輸入變數類型名HDIB,在Variable Name中輸入變數名m_hDIB,在Access中選中Public就在CMy111Doc中加入了公共成員變數m_hDIB;同樣加入int類型的m_nColorIndex、COLORREF類型的m_refColorBKG公共成員變數,再添加保護成員變數(在Access中選中Protected)CSize類的m_sizeDoc、CPalette*類的m_palDIB變數。右鍵點擊CMy111Doc類,點Add Member Function出現添加成員函數對話框,在Function Type下的框中輸入函數類型名void,在Function Declaration中輸入函數名InitDIBData(),在Access中選中Public就在CMy111Doc中加入了公共成員函數InitDIBData();同樣方法加入void類型的公共成員函數ReplaceHDIB(HDIB hDIB)。在111Doc.cpp中加入函數的代碼,InitDIBData()里加如下代碼:
if(m_palDIB!=NULL)
{
delete m_palDIB;
m_palDIB=NULL;
}
if(m_hDIB==NULL)
return;
LPSTR lpDIB=(LPSTR)::GlobalLock((HGLOBAL)m_hDIB);
if(::DIBWidth(lpDIB)>INT_MAX||::DIBHeight(lpDIB)>INT_MAX)
{
::GlobalUnlock((HGLOBAL)m_hDIB);
::GlobalFree((HGLOBAL)m_hDIB);
m_hDIB=NULL;
CString strMsg;
strMsg="BMP圖像太大!";
MessageBox(NULL,strMsg,NULL,MB_ICONINFORMATION|MB_OK);
return;
}
m_sizeDoc=CSize((int)::DIBWidth(lpDIB),(int)::DIBHeight(lpDIB));
::GlobalUnlock((HGLOBAL)m_hDIB);
m_palDIB=new CPalette;
if(m_palDIB==NULL)
{
::GlobalFree((HGLOBAL)m_hDIB);
m_hDIB=NULL;
return;
}
if(::CreateDIBPalette(m_hDIB,m_palDIB)==NULL)
{
delete m_palDIB;
m_palDIB=NULL;
return;
}
在函數ReplaceHDIB(HDIB hDIB)中加入如下代碼:
if(m_hDIB!=NULL)
::GlobalFree((HGLOBAL)m_hDIB);
m_hDIB=hDIB;
在CMy111doc.h的
// Attributes
public:
下面加入如下代碼:
HDIB GetHDIB() const
{
return m_hDIB;
}
CPalette* GetDocPalette() const
{
return m_palDIB;
}
CSize GetDocSize() const
{
return m_sizeDoc;
}
注意要在111Doc.h前加上#include "DIBAPI.h"語句(在class CMy111Doc:public CDocument語句前)
下面為CMy111View中的函數 void CMy111View::OnDraw(CDC* pDC)中添加如下代碼:
BeginWaitCursor();
CMy111* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
HDIB hDIB=pDoc->GetHDIB();
if(hDIB!=NULL)
{
LPSTR lpDIB=(LPSTR)::GlobalLock((HGLOBAL)hDIB);
int cxDIB=(int)::DIBWidth(lpDIB);
int cyDIB=(int)::DIBHeight(lpDIB);
::GlobalUnlock((HGLOBAL)hDIB);
CRect rcDIB;
rcDIB.top=rcDIB.left=0;
rcDIB.right=cxDIB;
rcDIB.bottom=cyDIB;
CRect rcDest;
if(pDC->IsPrinting())
{
int cxPage=pDC->GetDeviceCaps(HORZRES);
int cyPage=pDC->GetDeviceCaps(VERTRES);
int cxInch=pDC->GetDeviceCaps(LOGPIXELSX);
int cyInch=pDC->GetDeviceCaps(LOGPIXELSY);
rcDest.top=rcDest.left=0;
rcDest.bottom=(int)(((double)cyDIB*cxPage*cyInch)/((double)cxDIB*cxInch));
rcDest.right=cxPage;
int temp=cyPage-(rcDest.bottom-rcDest.top);
rcDest.bottom+=temp/2;
rcDest.top+=temp/2;
}
else
{
rcDest=rcDIB;
}
::PaintDIB(pDC->m_hDC,&rcDest,pDoc->GetHDIB(),&rcDIB,pDoc->GetDocPalette());
}
EndWaitCursor();
以上是關於圖像打開、顯示、保存的有關步驟和代碼。
在111.cpp文件的InitInstance()函數的ParseCommandLine(cmdInfo);語句下輸入語句
cmdInfo.m_nShellCommand = CCommandLineInfo::FileNothing;
則啟動時不自動打開一個空文檔。
顯示圖像直方圖步驟:
1、 點擊ResourceView,右鍵點擊Dialog,選Insert Dialog 在屬性對話框中將ID改為ID_HIST,對話框名稱改為「直方圖」
2、 在工具欄中點「插入」-「新建類」,輸入類名,並選Base Class為CDialog,Dialog ID為ID_HIST。這樣就將對話框和類聯系起來了,在該對話框中拖入一Edit控制項,將其ID設為IDC_HISTSHOW;
3、 快捷鍵「Ctrl+W」,出現MFC ClassWizard對話框,在Messages欄中分別選WM_INITDIALOG和WM_Paint,再點擊「Add Function」,即將對話框初始化和畫圖函數加入對話框類之中。
4、 在Hist.h文件「public:」下面輸入如下變數定義:
LONG m_lCount[256];
char* m_lpDIBBits;
LONG m_lWidth;
LONG m_lHeight;
int m_iIsDraging;
CDlgIntensity(CWnd* pParent = NULL);
5、 打開Hist.cpp程序,在CHist::OnInitDialog()函數中「// TODO: Add extra initialization here」前將如下代碼拷貝進去:
unsigned char* lpSrc;
LONG i;
LONG j;
6、 在「// TODO: Add extra initialization here」後將如下代碼拷貝進去:
CWnd* pWnd=GetDlgItem(IDC_HISTSHOW);
CRect rect;
GetClientRect(rect);
ClientToScreen(&rect);
for(i=0;i<256;i++)
{
m_lCount[i]=0;
}
LONG lLineBytes;
lLineBytes=WIDTHBYTES(m_lWidth*8);
for(i=0;i<m_lHeight;i++)
{
for(j=0;j<m_lWidth;j++)
{
lpSrc=(unsigned char*)m_lpDIBBits+lLineBytes*i+j;
m_lCount[*(lpSrc)]++;
}
}
m_iIsDraging=0;
7、在CHist::OnPaint()函數「CPaintDC dc(this);」前將如下代碼拷如其中:
CString str;
LONG i;
LONG lMaxCount=0;
LONG m_iLowGray=0;
LONG m_iUpGray=255;
在CHist::OnPaint()函數「// TODO: Add your message handler code here」後將如下代碼拷如其中:
CWnd* pWnd=GetDlgItem(IDC_ HISTSHOW);
CDC* pDC=pWnd->GetDC();
pWnd->Invalidate();
pWnd->UpdateWindow();
pDC->Rectangle(0,0,330,300);
CPen* pPenRed=new CPen;
pPenRed->CreatePen(PS_SOLID,1,RGB(255,0,0));
CPen* pPenBlue=new CPen;
pPenBlue->CreatePen(PS_SOLID,1,RGB(0,0,255));
CPen* pPenGreen=new CPen;
pPenGreen->CreatePen(PS_SOLID,1,RGB(0,255,0));
CGdiObject* pOldPen=pDC->SelectObject(pPenRed);
pDC->MoveTo(10,10);
pDC->LineTo(10,280);
pDC->LineTo(320,280);
str.Format("0");
pDC->TextOut(10,283,str);
str.Format("50");
pDC->TextOut(60,283,str);
str.Format("100");
pDC->TextOut(110,283,str);
str.Format("150");
pDC->TextOut(160,283,str);
str.Format("200");
pDC->TextOut(210,283,str);
str.Format("255");
pDC->TextOut(265,283,str);
for(i=0;i<256;i+=5)
{
if((i&1)==0)
{
pDC->MoveTo(i+10,280);
pDC->LineTo(i+10,284);
}
else
{
pDC->MoveTo(i+10,280);
pDC->LineTo(i+10,282);
}
}
pDC->MoveTo(315,275);
pDC->LineTo(320,280);
pDC->LineTo(315,285);
pDC->MoveTo(10,10);
pDC->LineTo(5,15);
pDC->MoveTo(10,10);
pDC->LineTo(15,15);
for(i=m_iLowGray;i<=m_iUpGray;i++)
{
if(m_lCount[i]>lMaxCount)
{
lMaxCount=m_lCount[i];
}
}
pDC->MoveTo(10,25);
pDC->LineTo(14,25);
str.Format("%d",lMaxCount);
pDC->TextOut(11,26,str);
pDC->SelectObject(pPenGreen);
pDC->MoveTo(m_iLowGray+10,25);
pDC->LineTo(m_iLowGray+10,280);
pDC->MoveTo(m_iUpGray+10,25);
pDC->LineTo(m_iUpGray+10,280);
pDC->SelectObject(pPenBlue);
if(lMaxCount>0)
{
for(i=m_iLowGray;i<=m_iUpGray;i++)
{
pDC->MoveTo(i+10,280);
pDC->LineTo(i+10,281-(int)(m_lCount[i]*256/lMaxCount));
}
}
pDC->SelectObject(pOldPen);
delete pPenRed;
delete pPenBlue;
delete pPenGreen;
8、點開ResourceView中的Menu,出現IDR_MAINFRAME和 IDR_MY111TYPE,雙擊IDR_MY111TYPE就出現了程序界面,有文件、編輯、查看、窗口、幫助按鈕。點「查看」下面的虛線框右鍵——點「屬性」,輸入標題(直方圖),和ID(大寫英文,如ID_VIEW_HIST),這樣就將按鈕和程序通過ID聯系起來了,點擊該按鈕,就會執行相應的程序。下面為該按鈕添加函數:點Ctrl+W ,出現MFC ClassWizard對話框,選Class name為CMy111View,在Object IDs對應的選項中選中設置的ID(如為ID_VIEW_HIST),在Messages選項中選中COMMAND,然後點擊「Add Function」按鈕,選默認設置,就為ID_VIEW_HIST添加了相應的函數OnViewHist()。該函數在111View.cpp文件中定義,在函數void CMy111View:: OnViewHist()添加如下代碼:
// TODO: Add your command handler code here
CMy111Doc* pDoc=GetDocument();
if(pDoc->m_hDIB==NULL)
{
MessageBox("請先打開一幅256色的BMP圖像!","系統提示",MB_ICONINFORMATION|MB_OK);
return;
}
LPSTR lpDIB;
LPSTR lpDIBBits;
lpDIB=(LPSTR)::GlobalLock((HGLOBAL)pDoc->GetHDIB());
lpDIBBits=::FindDIBBits(lpDIB);
if(::DIBNumColors(lpDIB)!=256)
{
MessageBox("目前只支持查看256色點陣圖灰度直方圖!","系統提示",MB_ICONINFORMATION|MB_OK);
::GlobalUnlock((HGLOBAL)pDoc->GetHDIB());
return;
}
BeginWaitCursor();
CHist dlgPara;
dlgPara.m_lpDIBBits=lpDIBBits;
dlgPara.m_lWidth=::DIBWidth(lpDIB);
dlgPara.m_lHeight=::DIBHeight(lpDIB);
// dlgPara.m_iLowGray=0;
// dlgPara.m_iUpGray=255;
if(dlgPara.DoModal()!=IDOK)
{
return;
}
::GlobalUnlock((HGLOBAL)pDoc->GetHDIB());
EndWaitCursor();
㈩ mycoreinfo 多久入賬
如果是正式增值稅一般納稅人,必須當月認證當月抵扣。
根據會計准則的對企業財務會計信息質量要求及時性原則的規定:企業對於已經發生的交易或者事項,應當及時進行會計確認、計量和報告,不得提前或延後。
發生了費用支出就應在發生的時間入賬,如果發生了沒及時記錄,可以補記,但仍應作為發生當期的成本費用,如果跨年度應作為會計差錯,調整以前年度的相關科目。
(10)mycoreinfo股票賣出擴展閱讀:
注意事項:
1、發票是蓋有稅務監制章的,但不能說沒有蓋稅務監制章的憑證都不合規。如蓋有財政監制章的行政事業單位統一收據,沒有蓋稅務監制章的汽車票、火車票及飛機票,醫院使用的專用收據等。
2、如果去境外出差,形式發票也是可以作為報銷憑證的。還有如在合同糾紛中訴訟至法院,法院的判決及裁決書也是可以作為入賬憑證的。在自製原始憑證中,如借款單也是可以作為付款依據的。
3、審核發票的名稱、發票的類型、填制日期和編號、經濟業務內容、數量、計量單位、單價和金額、填制單位名稱及經辦人的簽名並蓋章等。