<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 13,comments - 0,trackbacks - 0

    屏蔽方法:

     

    進入新的CCLayer時:

    [[CCDirector sharedDirector].touchDispatcher addTargetedDelegate:self priority:kCCMenuHandlerPriority swallowsTouches:YES];

     

    離開此CCLayer時調用

    [[CCDirector sharedDirector].touchDispatcher removeDelegate:self];

     

    重寫方法

    - (BOOL)ccTouchBegan:(UITouch *)touch withEvent:(UIEvent *)event;

     

    解釋:

    由于CCMenu 按鈕接受按鍵的優先級為-128(值越小優先級越高),所有不論處在那一層都會接收到點擊 

    [[CCDirector sharedDirector].touchDispatcher addTargetedDelegate:self priority:kCCMenuHandlerPriority swallowsTouches:YES];

    priority: 優先級 kCCMenuHandlerPriority(-128)

    swallowsToucher: 是否吃掉按鈕不叫其他層再接收了  如果為NO其他層還是一樣會接收到Touch數據

     

    注意離開此CCLayer時一定要調用

    [[CCDirector sharedDirector].touchDispatcher removeDelegate:self];

    否則下面層將不再接收按鍵

    posted @ 2012-10-20 12:07 CrackRen 閱讀(687) | 評論 (0)編輯 收藏

    Class FileUtils
    此類包含了一般的通用文件操作工具。
        ● 讀、寫文件
        ● 創建一個目錄,如果其上級的各級父目錄不存在,也會創建它們
        ● 拷貝文件和目錄
        ● 刪除文件和目錄
        ● 將URL轉換成文件
        ● 通過過濾器或者擴展名列出文件
        ● 比較文件內容
        ● 修改文件最后修改日期
        ● 計算校驗和
    累了,去讀意優休息一下下,QQ空間,美文,非主流,網絡日記,搞笑短信,祝福短信,熱門短信,有意思啊   
    Class IOUtils
    此類包含了一般的IO流操作工具。

        ● closeQuietly – 忽略 nulls和錯誤而關閉一個流
        ● toXxx/read – 這些類從一個流讀取數據
        ● write – 這些方法寫數據到一個流
        ● copy – 這些方法從一個流到另一個流拷貝數據
        ● contentEquals – 這些方法比較兩個流的數據

    Class FilenameUtils
    此類包含了文件和路徑的操作工具。

    當你將在Windows下開發的Java程序轉移到Unix系統時,你可能遇到文件路徑的問題,這個類的目標幫你解決這個問題。注意: 你完全可以不用這個類,而使用JDK提供的兩個構造參數的File類,File(File,String)。

    大多數方法識別兩個分隔符(/ 和 \), 和兩個前綴集合。

    這個類獎一個文件名稱定義成六部分(例如 C:\dev\project\file.txt):

        ● 前綴 – C:\
        ● 路徑 – dev\project\
        ● 全路徑 – C:\dev\project\
        ● 文件名稱 – file.txt
        ● 基本名稱 – file
        ● 擴展名 – txt

    這個類能夠處理以分隔符結尾的目錄文件。如果你忽略了最后一個分隔符,它也能識別其是文件還是目錄。這個類僅支持UNIX和Windows樣式的名稱,前綴匹配方式如下:

    Windows:
    a\b\c.txt           –> ""          –> 相對
    \a\b\c.txt          –> "\"         –> 當前的絕對驅動器
    C:a\b\c.txt         –> "C:"        –> 相對的驅動器
    C:\a\b\c.txt        –> "C:\"       –> 絕對
    \\server\a\b\c.txt  –> "\\server\" –> UNC

    Unix:
    a/b/c.txt           –> ""          –> 相對
    /a/b/c.txt          –> "/"         –> 絕對
    ~/a/b/c.txt         –> "~/"        –> 當前用戶
    ~                   –> "~/"        –> 當前用戶 (slash added)
    ~user/a/b/c.txt     –> "~user/"    –> 命名用戶
    ~user               –> "~user/"    –> 命名用戶 (slash added)
       
    org.apache.commons.io.filefilter 
    此包中包含了大量的文件名稱過濾器。
    DirectoryFilter  僅接受目錄
    PrefixFileFilter 基于前綴
    SuffixFileFilter 基于后綴
    NameFileFilter 基于文件名稱
    WildcardFileFilter 基于通配符
    AgeFileFilter 基于最后修改時間
    SizeFileFilter 基于文件尺寸

     

    下載地址:

    http://commons.apache.org/io/

    posted @ 2012-10-20 12:06 CrackRen 閱讀(281) | 評論 (0)編輯 收藏

    當使用JSplitpane分隔面板時

    可以通過 splitPaneMain.setOneTouchExpandable(true);

    設置 oneTouchExpandable 屬性的值,要使 JSplitPane 在分隔條上提供一個 UI 小部件來快速展開/折疊分隔條

     

    但是如果要初始化時默認就折疊一邊的話 網上搜索添加下面幾句就可以了,但是驗證了下只有在一邊沒加控件時才行

    // Hide left or top 
    splitPaneMain.getLeftComponent().setMinimumSize(new Dimension());
    splitPaneMain.setDividerLocation(0.0d);

    // Hide right or bottom
    splitPaneMain.getRightComponent().setMinimumSize(new Dimension());
    splitPaneMain.setDividerLocation(1.0d);
    posted @ 2011-11-24 12:02 CrackRen 閱讀(452) | 評論 (0)編輯 收藏
    寫個工具把不同文件夾下的文件拷貝到一個文件夾下去,碰到格問題,需要考慮到生成唯一文件名,想來想去還是使用MD5計算吧

    import java.security.MessageDigest;

    /**
     *
     * 
    @author apple
     
    */
    public class xMD5 {
        
        
    public final static String MD5(String s) {
            
    char hexDigits[] = {'0''1''2''3''4''5''6''7''8''9',
                
    'A''B''C''D''E''F'};
            
    try {
                
    byte[] strTemp = s.getBytes();
                
    //使用MD5創建MessageDigest對象
                MessageDigest mdTemp = MessageDigest.getInstance("MD5");
                mdTemp.update(strTemp);
                
    byte[] md = mdTemp.digest();
                
    int j = md.length;
                
    char str[] = new char[j * 2];
                
    int k = 0;
                
    for (int i = 0; i < j; i++) {
                    
    byte b = md[i];
                    
    //將沒個數(int)b進行雙字節加密
                    str[k++= hexDigits[b >> 4 & 0xf];
                    str[k
    ++= hexDigits[b & 0xf];
                }
                
    return new String(str);
            } 
    catch (Exception e) {
                
    return null;
            }
        }
      
    }
    posted @ 2011-10-25 17:37 CrackRen 閱讀(190) | 評論 (0)編輯 收藏

     

     

    // 觸摸屏
    -(void) ccTouchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
    {
    
        for( UITouch *touch in touches ) {
    		CGPoint location = [touch locationInView: [touch view]];
    		location = [[CCDirector sharedDirector] convertToGL: location];
    
            // 各種動作
            
            // 瞬時動作
            // 設置坐標
            id action0 = [CCPlace actionWithPosition:ccp(240,160)];
            // 隱藏
            id action1 = [CCHide action];
            // 顯示
            id action2 = [CCShow action];
            // 隱藏/顯示
            id action3 = [CCToggleVisibility action];
            
            // 延時動作
            // 移動
            id action4 = [CCMoveTo actionWithDuration:2 position:ccp(0,0)];
            id action5 = [CCMoveBy actionWithDuration:2 position:ccp(100,100)];
            // 彈跳
            id action6 = [CCJumpTo actionWithDuration:2 position:ccp(0,200) height:30 jumps:5];
            id action7 = [CCJumpBy actionWithDuration:2 position:ccp(100, 0) height:30 jumps:5];
            // 貝塞爾移動
            ccBezierConfig bezier;
            bezier.controlPoint_1 = ccp(0, 0);
            bezier.controlPoint_2 = ccp(100, 300);
            bezier.endPosition = ccp(0,100);
            id action8 = [CCBezierTo actionWithDuration:3 bezier:bezier];
            id action9 = [CCBezierBy actionWithDuration:3 bezier:bezier];
            // 縮放
            id action10 = [CCScaleTo actionWithDuration:2 scale:4];
            id action11 = [CCScaleBy actionWithDuration:2 scale:0.5];
            // 旋轉
            id action12 = [CCRotateTo actionWithDuration:2 angle:180];
            id action13 = [CCRotateBy actionWithDuration:2 angle:-180];
            // 閃爍
            id action14 = [CCBlink actionWithDuration:3 blinks:5];
            // 色調變化
            id action15 = [CCTintTo actionWithDuration:2 red:255 green:0 blue:0];
            id action16 = [CCTintBy actionWithDuration:0.5 red:0 green:255 blue:255];
            // 淡化到/淡入/淡出
            id action17 = [CCFadeTo actionWithDuration: 1 opacity:80];
            id action18 = [CCFadeIn actionWithDuration:1.0f];
            id action19 = [CCFadeOut actionWithDuration:1.0f];
            
            // 動畫順序播放
            CCAnimation *animation = [CCAnimation animation];
            [animation setDelay:2];
            // 這里就添加兩幀,需要自己添加
            [animation addFrameWithTexture:sprTest.texture rect:CGRectMake(0, 0, 44, 34)];
            [animation addFrameWithTexture:sprTest.texture rect:CGRectMake(0, 34, 44, 34)]; 
            id action20 = [CCAnimate actionWithAnimation: animation];
            
            // 組合動作
            // 動畫序列
            id action21 = [CCSequence actions:action19, action18, nil];
            // 重復動作
            id action22 = [CCRepeat actionWithAction:action21 times:10];
            // 延時動作
            id action23 = [CCDelayTime actionWithDuration:1];
            // 同時動作
            id action24 = [CCSpawn actions:action0, action4, action21, nil];
            // 無限循環動作
            id action25 = [CCRepeatForever actionWithAction:action21];
            
            // 擴展動作
            // 回調動作
            id acf0 = [CCCallFunc actionWithTarget:self selector:@selector(CallBack1)];
            // 回調動作,傳遞動畫自身指針
            id acf1 = [CCCallFuncN actionWithTarget:self selector:@selector(CallBack2:)];  
            // 回調動作,傳遞動畫自身指針已經一個參數
            id acf2 = [CCCallFuncND actionWithTarget:self selector:@selector(CallBack3:data:) data:(void*)2];
            id action26 = [CCSequence actions:action19, action18, acf0, action23, action0, nil];
            // 反轉動作,只能用在有方向有順序的動作上
            id action27 = [action9 reverse];
    
            // 速度變化
            //id ac = [CCSequence actions:action9,action27,nil];
            id actiontest = [CCMoveBy actionWithDuration:0.5 position:ccp(200,0)];
            id  ac = [CCSequence actions:actiontest,actiontest, nil];
            // 漸快
            id action28 = [CCEaseIn actionWithAction:ac rate:3];
            // 漸慢
            id action29 = [CCEaseOut actionWithAction:ac rate:3];
            // 先漸快再漸慢
            id action30 = [CCEaseInOut actionWithAction:ac rate:3];
            // 正弦波移動
            id action31 = [CCEaseSineIn actionWithAction:ac];
            id action32 = [CCEaseSineOut actionWithAction:ac];
            id action33 = [CCEaseSineInOut actionWithAction:ac];
            // 由極慢至極快
            id action34 = [CCEaseExponentialIn actionWithAction:ac];
            // 由極快到極慢
            id action35 = [CCEaseExponentialOut actionWithAction:ac];
            // 由極慢至極快 再由極快到慢
            id action36 = [CCEaseExponentialInOut actionWithAction:ac];
            // 手動設定速度,可通過SetSpeed不斷調整
            id action37 = [CCSpeed actionWithAction:ac speed:(CCRANDOM_0_1() * 5)];
    
            [sprTest runAction:action37];
        
    	}  
    }
    // 回調函數1
    - (void) CallBack1
    {
    	[sprTest runAction:[CCTintBy actionWithDuration:2 red:255 green:0 blue:255]];	
    }
    
    // 回調函數2
    - (void) CallBack2:(id)sender
    {
        [sender runAction:[CCTintBy actionWithDuration:1 red:255 green:0 blue:255]];
    }
    
    // 回調函數3
    -(void) CallBack3:(id)sender data:(void*)data
    {
    	[sender runAction:[CCTintBy actionWithDuration:(NSInteger)data red:255 green:0 blue:255]];	
    }
     
    posted @ 2011-10-14 13:18 CrackRen 閱讀(951) | 評論 (0)編輯 收藏

     

     

       //
        -(void) startMenu:(id) sender
        {
            CCScene* scenec = [CCTestScene scene];
            //部落格------
            //CCTransitionTurnOffTiles *transitionScene = [CCTransitionTurnOffTiles transitionWithDuration:3 scene:scenec];
            //近遠-遠近-----
            //CCTransitionShrinkGrow *transitionScene = [CCTransitionShrinkGrow transitionWithDuration:3 scene:scenec];
            //另一個layout左側進入(視覺感覺是屏幕右移)
            //CCTransitionSlideInL *transitionScene = [CCTransitionSlideInL transitionWithDuration:3 scene:scenec];
            //另一個layout右側進入(視覺感覺是屏幕左移)
            //CCTransitionSlideInR *transitionScene = [CCTransitionSlideInR transitionWithDuration:3 scene:scenec];
            //另一個layout上側進入(視覺感覺是屏幕下移)
            //CCTransitionSlideInT *transitionScene = [CCTransitionSlideInT transitionWithDuration:3 scene:scenec];
            //另一個layout下側進入(視覺感覺是屏幕上移)
            //CCTransitionSlideInB *transitionScene = [CCTransitionSlideInB transitionWithDuration:3 scene:scenec];
            //當前屏幕被分為3列,兩則下移,中間上移
            //CCTransitionSplitCols *transitionScene = [CCTransitionSplitCols transitionWithDuration:3 scene:scenec];
            //當前屏幕被分為3列,兩則左移,中間右移
            //CCTransitionSplitRows *transitionScene = [CCTransitionSplitRows transitionWithDuration:3 scene:scenec];
            //扇形轉換-----
            //CCTransitionRadialCW *transitionScene = [CCTransitionRadialCW transitionWithDuration:3 scene:scenec];
            //平面旋轉-----
            //CCTransitionRotoZoom *transitionScene = [CCTransitionRotoZoom transitionWithDuration:3 scene:scenec];
            //近-遠-跳動------
            //CCTransitionJumpZoom *transitionScene = [CCTransitionJumpZoom transitionWithDuration:3 scene:scenec];
            //立體反轉(X軸)--(還有種從近到遠,從遠到近的感覺)--------
            //CCTransitionZoomFlipX *transitionScene = [CCTransitionZoomFlipX transitionWithDuration:3 scene:scenec];
            //立體反轉(Y軸)-(還有種從近到遠,從遠到近的感覺)-------
            //CCTransitionZoomFlipY *transitionScene = [CCTransitionZoomFlipY transitionWithDuration:3 scene:scenec];
            //立體反轉(X,Y軸)---(還有種從近到遠,從遠到近的感覺)-----
            //CCTransitionZoomFlipAngular *transitionScene = [CCTransitionZoomFlipAngular transitionWithDuration:3 scene:scenec];
            //另外一個layout左側進入覆蓋當前layout
            //CCTransitionMoveInL *transitionScene = [CCTransitionMoveInL transitionWithDuration:3 scene:scenec];
            //另外一個layout右側進入覆蓋當前layout
            //CCTransitionMoveInR *transitionScene = [CCTransitionMoveInR transitionWithDuration:3 scene:scenec];
            //另外一個layout上側進入覆蓋當前layout
            //CCTransitionMoveInT *transitionScene = [CCTransitionMoveInT transitionWithDuration:3 scene:scenec];
            //另外一個layout下側進入覆蓋當前layout
            //CCTransitionMoveInB *transitionScene = [CCTransitionMoveInB transitionWithDuration:3 scene:scenec];
            //立體反轉(X軸)--2D平面反轉,沒有遠近感
            //CCTransitionFlipX *transitionScene = [CCTransitionFlipX transitionWithDuration:3 scene:scenec];
            //立體反轉(Y軸)--2D平面反轉,沒有遠近感
            //CCTransitionFlipY *transitionScene = [CCTransitionFlipY transitionWithDuration:3 scene:scenec];
            //立體反轉(X,Y軸)--2D平面反轉,沒有遠近感
            //CCTransitionFlipAngular *transitionScene = [CCTransitionFlipAngular transitionWithDuration:3 scene:scenec];
            //實體-透明-實體(默認無顏色,可以附帶顏色)
            //CCTransitionFade* transitionScene = [CCTransitionFade transitionWithDuration:3 scene:scenec withColor:ccWHITE];
            //另外一個直接漸變覆蓋當前layout
            //CCTransitionCrossFade *transitionScene = [CCTransitionCrossFade transitionWithDuration:3 scene:scenec];
            //移動(方格狀)部落格,從左下往右上
            //CCTransitionFadeTR *transitionScene = [CCTransitionFadeTR transitionWithDuration:3 scene:scenec];
            //移動(方格狀)部落格,從右上往左下
            CCTransitionFadeBL *transitionScene = [CCTransitionFadeBL transitionWithDuration:3 scene:scenec];
            //移動(長矩形,寬度是屏幕寬)部落格,從下往上
            //CCTransitionFadeUp *transitionScene = [CCTransitionFadeUp transitionWithDuration:3 scene:scenec];
            //移動(長矩形,寬度是屏幕寬)部落格,從上往下
            //CCTransitionFadeDown *transitionScene = [CCTransitionFadeDown transitionWithDuration:3 scene:scenec];
            [[CCDirector sharedDirector] replaceScene: transitionScene];
        }
      
    posted @ 2011-10-11 13:57 CrackRen 閱讀(276) | 評論 (0)編輯 收藏

     

    BOOL Download( CString szURL, CString szDstFile )
    {
    	BOOL res = false;
    	CInternetSession Session;
    	CHttpFile *pHttpFile = NULL;
    
    	try{
    		pHttpFile = (CHttpFile*)Session.OpenURL(szURL);
    	}catch(CInternetException * m_pException){
    		pHttpFile = NULL;
    		m_pException->m_dwError;
    		m_pException->Delete();
    		Session.Close();
    		res = false;
    	}
    
    	CString strLine;
    	CFile xmlFile;
    	BOOL bResult = xmlFile.Open(szDstFile, CFile::modeCreate | CFile::modeWrite);
    	if(pHttpFile != NULL && bResult)
    	{
    		while(pHttpFile->ReadString(strLine) != NULL)
    		{
    			xmlFile.Write(strLine, strLine.GetLength());
    		}
    		xmlFile.Close();
    		res = true;
    	}
    	else
    	{
    		res = false;
    	}
    
    	Session.Close();
    	pHttpFile->Close();
    	delete pHttpFile;
    	pHttpFile = NULL;
    	
    	return res;
    }
     
    posted @ 2011-08-31 16:35 CrackRen 閱讀(139) | 評論 (0)編輯 收藏

    函數原型:

    BOOL AfxExtractSubString(CString& rString, LPCTSTR lpszFullString, int iSubString, TCHAR chSep = '\n')

    參數說明:

    rString  保存輸出的子字符串

    lpszFullString  待分割的字符串

    iSubString  提取的子字符串的序號,從0開始。假如你想提取第3段,該參數就輸入2

    chSep  用于分割的字符,默認的是'\n' 

    返回值:分割成功,就返回TRUE;iSubString越界,則返回FALSE

    舉例說明:

    	CString szGet;	
    	CString szText = "var hq_str_sh600736=\"蘇州高新,5.33,5.32,5.70,5.85,5.32,5.71,5.72,56939555,323766177,92561,5.71,121300,5.70,57200,5.69,34600,5.68,18600,5.67,130327,5.72,177801,5.73,40999,5.74,194908,5.75,69600,5.76,2011-08-12,15:03:07\";";
    
    	AfxExtractSubString(szGet, szText, 1, ',');	//取回 5.33
    	AfxExtractSubString(szGet, szText, 2, ',');	//取回 5.32
    	AfxExtractSubString(szGet, szText, 3, ',');	//取回 5.70
    	//想要取回蘇州高新
    	AfxExtractSubString(szGet, szText, 0, ',');	//先取回var hq_str_sh600736="蘇州高新
    	AfxExtractSubString(szGet, szGet, 1, '\"');	//取回 蘇州高新
     

    注意:用于分割的只能是字符,不能是字符串。

    多個字符使用_tcstok函數,另外可以使用find函數自己寫.

     

    posted @ 2011-08-13 21:18 CrackRen 閱讀(645) | 評論 (0)編輯 收藏

    計算某天星期幾,最出名的算法就是蔡勒公式:

     

    —— 蔡勒(Zeller)公式 
    歷史上的某一天是星期幾?未來的某一天是星期幾?關于這個問題,有很多計算公式(兩個通用計算公式和一些分段計算公式),其中最著名的是蔡勒(Zeller)公式。即w=y+[y/4]+[c/4]-2c+[26(m+1)/10]+d-1 
    
    公式中的符號含義如下,w:星期;c:世紀-1;y:年(兩位數);m:月(m大于等于3,小于等于14,即在蔡勒公式中,某年的1、2月要看作上一年的13、14月來計算,比如2003年1月1日要看作2002年的13月1日來計算);d:日;[ ]代表取整,即只要整數部分。(C是世紀數減一,y是年份后兩位,M是月份,d是日數。1月和2月要按上一年的13月和 14月來算,這時C和y均按上一年取值。)
    
    算出來的W除以7,余數是幾就是星期幾。如果余數是0,則為星期日。 
    
    以2049年10月1日(100周年國慶)為例,用蔡勒(Zeller)公式進行計算,過程如下: 
    蔡勒(Zeller)公式:w=y+[y/4]+[c/4]-2c+[26(m+1)/10]+d-1 
    =49+[49/4]+[20/4]-2×20+[26× (10+1)/10]+1-1 
    =49+[12.25]+5-40+[28.6] 
    =49+12+5-40+28 
    =54 (除以7余5) 
    即2049年10月1日(100周年國慶)是星期5。
     

    想知道更詳細的到網上查下.

     

    實現的算法函數:

    /************************************************************************
    * 返回值 0~6(星期日~星期六)                                                                   
    ************************************************************************/
    int GetWeek(int nYear, int nMouth, int nDay)
    {
    	int week;
    	int c = nYear/100;
    	if(nMouth<3)
    	{
    		nYear -= 1;
    		nMouth += 12;
    	}
    
    	week = ((nYear%100)+((nYear%100)/4)+(c/4)-2*c+(26*(nMouth+1)/10)+nDay-1)%7;
            if(week<0) week += 7; return week; }
    注意:如果結果為負數的時候要加個7。   
    posted @ 2011-07-29 17:09 CrackRen 閱讀(185) | 評論 (0)編輯 收藏

     

    CString ConverToUTF8(CString szText)
    {
    	WCHAR *chBuf;
    	char * p;
    	int iLen;
    
        iLen = MultiByteToWideChar(CP_ACP, 0, szText,-1 , NULL, 0);
        chBuf = new WCHAR[iLen+1];
        ZeroMemory(chBuf, iLen * sizeof(WCHAR));
        iLen =MultiByteToWideChar(CP_ACP, 0, szText, -1, chBuf, iLen+1);
    
    	iLen = WideCharToMultiByte(CP_UTF8, 0, chBuf,-1 , NULL, 0,NULL,NULL);
    	p = new CHAR[iLen+1];
        ZeroMemory(p, iLen * sizeof(CHAR));
        iLen =WideCharToMultiByte(CP_UTF8, 0, chBuf, -1,  p, iLen+1,NULL,NULL);
    
    	delete []chBuf;
    	CString re(p);
    
    	return re;
    }
    
    CString UTF8ToUnicode(CString szText)
    {
    	int  len = 0;
    	len = szText.GetLength();
    	int  unicodeLen = ::MultiByteToWideChar( CP_UTF8,0,szText.GetBuffer(len),-1,NULL,0 ); 
    	
    	wchar_t *  pUnicode; 
    	pUnicode = new  wchar_t[unicodeLen+1]; 
    	
    	memset(pUnicode,0,(unicodeLen+1)*sizeof(wchar_t)); 
    	::MultiByteToWideChar( CP_UTF8,0,szText.GetBuffer(len),-1,(LPWSTR)pUnicode,unicodeLen ); 
    	
    	CString  rt = pUnicode; 
    	delete  pUnicode;
    	
    	return  rt; 	
    }   
      
    posted @ 2011-02-21 14:48 CrackRen 閱讀(234) | 評論 (0)編輯 收藏

    這里是利用COM組建對xml文件進行操作,所以程序進入時要進行COM組件的初始化和卸載

    ::CoInitialize(NULL); 和 ::CoUninitialize();要對應

    為了不影響其他地方的操作,最好把這個放在項目的開始和結束

    你也可以使用AfxOleInit();他對CoInitialize進行了封裝,具體的區別可以到網上查一下

    另外確保安裝了MS XML Parser 運行庫

     

     

    使用時需要加上

    #import <msxml3.dll>
     

    下面的兩個函數就是對xml文件的操作,大部分操作都已涉及

     

    ///////////////////////////////////////////////////////////////////////////////
    #import <msxml3.dll>
    typedef MSXML2::IXMLDOMDocumentPtr DOMDocumentPtr;
    typedef MSXML2::IXMLDOMElementPtr DOMElementPtr;
    typedef MSXML2::IXMLDOMProcessingInstructionPtr	DOMProInstructionPtr;
    typedef MSXML2::IXMLDOMNamedNodeMapPtr DOMNamedNodeMapPtr;
    typedef MSXML2::IXMLDOMNodeListPtr DOMNodeListPtr;
    typedef MSXML2::IXMLDOMNodePtr DOMNodePtr;
    typedef MSXML2::IXMLDOMTextPtr DOMTextPtr;
    ///////////////////////////////////////////////////////////////////////////////
    int ReadXML(CString szXMLFile)
    {
    	if (szXMLFile.IsEmpty())
    		return -1;
    
    	DOMDocumentPtr pXMLDoc;
    	CString szText;
    
    	// 初始化COM組件,必須與::CoUninitialize();相對應
    	// 這里可以這么使用,但以后盡量在程序開始調用,程序結束卸載,否則可能會影響到其他地方使用
    	// 用AfxOleInit();也可以,但也必須確保只調用了一次,最好放在程序的開始
    	::CoInitialize(NULL);
    	
    	// 創建DOMDocument對象,并判斷是否創建成功
    	HRESULT	hr = pXMLDoc.CreateInstance(__uuidof(MSXML2::DOMDocument30));
    	if(!SUCCEEDED(hr))
    	{
    		MessageBox(NULL, "無法創建DOMDocument對象,請檢查是否安裝了MS XML Parser 運行庫!", "Error", MB_ICONERROR|MB_OK);
    		return -1;
    	}
    
    	if(pXMLDoc->load(_variant_t(szXMLFile)) == FALSE)
    	{
    		MessageBox(NULL, "無法打開存檔!", "Error", MB_ICONERROR|MB_OK);
    		return -2;
    	}
    
    	// 是否有根節點,取得根節點
    	DOMElementPtr pRootElem = pXMLDoc->GetdocumentElement();
    	if (pRootElem == NULL)
    		return -3;
    
    	// 取得根節點的名字
    	szText = (char*)(pRootElem->GetnodeName());
    
    	// 在根節點下查找名叫Globals的節點并取得
    	DOMNodePtr pGlobalNode = pRootElem->selectSingleNode("Globals");
    	if (pGlobalNode == NULL)
    		return -3;
    	
    	// 取得屬性列表
    	DOMNamedNodeMapPtr pNodeMap = pGlobalNode->Getattributes();
    
    	// 根據名字直接取得屬性節點并獲取值
    	DOMNodePtr pAttribNode = pNodeMap->getNamedItem("Attrib");
    	szText = (char *)(pAttribNode->Gettext());
    	pAttribNode = pNodeMap->getNamedItem("作用");
    	szText = (char *)(pAttribNode->Gettext());
    
    	// 另外在有些情況下Node可以轉換成Element使用
    	DOMElementPtr pGlobalElem = pGlobalNode;
    	szText = (char*)(_bstr_t)(pGlobalElem->getAttribute("Attrib"));
    	szText = (char*)(_bstr_t)(pGlobalElem->getAttribute("作用"));
    	
    	// 如果不知道名字可以取得屬性的個數,逐個查找屬性
    	long len = pNodeMap->Getlength();
    	for (int i=0; i<len; ++i)
    	{
    		pAttribNode = pNodeMap->Getitem(i);
    		szText = (char *)(pAttribNode->GetnodeName());	// 取得屬性名字
    		szText = (char *)(pAttribNode->Gettext());		// 取得屬性值
    	}
    	
    	DOMNodePtr pTempNode;
    	// 取得Globals下的子節點
    	if((pTempNode = pGlobalNode->GetfirstChild()))
    	{
    		szText = (char*)pTempNode->GetnodeName();
    		szText = (char*)pTempNode->Gettext();
    
    		// 循環取得相鄰的節點
    		while((pTempNode = pTempNode->GetnextSibling()))
    		{
    			szText = (char*)pTempNode->GetnodeName();
    			szText = (char*)pTempNode->Gettext();
    		}
    	}
    
    	// 從根節點中查找Data的子節點
    	DOMNodePtr pDataNode = pRootElem->selectSingleNode("Data");
    	if (pDataNode == NULL)
    		return -1;
    
    	// 從Data節點下列取出所有叫Data的節點
    	DOMNodeListPtr pDataList = pDataNode->selectNodes("Data");
    	len = pDataList->Getlength();
    	for(i=0; i<len; ++i)
    	{
    		pTempNode = pDataList->Getitem(i);
    		szText = (char*)pTempNode->GetnodeName();
    		szText = (char*)pTempNode->Gettext();
    	}
    
    	// 確保卸載掉所有的對象才能調用CoUninitialize
    	if(pNodeMap)pNodeMap.Detach();
    	if(pAttribNode)pAttribNode.Detach();
    	if(pTempNode)pTempNode.Detach();
    	if(pGlobalNode)pGlobalNode.Detach();
    	if(pGlobalElem)pGlobalElem.Detach();
    	if(pDataNode)pDataNode.Detach();
    	if(pDataList)pDataList.Detach();
    	if(pRootElem)pRootElem.Detach();
    	if(pXMLDoc)pXMLDoc.Detach();
    
    	// 卸掉COM,必須與CoInitialize對應
    	::CoUninitialize();
    	return 0;
    }
    
    int SaveXML(CString szXMLFile)
    {
    	DOMDocumentPtr pXMLDoc;
    	CString szText;
    
    	// 初始化COM組件,必須與::CoUninitialize();相對應
    	// 這里可以這么使用,但以后盡量在程序開始調用,程序結束卸載,否則可能會影響到其他地方使用
    	// 用AfxOleInit();也可以,但也必須確保只調用了一次,最好放在程序的開始
    	::CoInitialize(NULL);
    
    	// 創建DOMDocument對象,并判斷是否創建成功
    	HRESULT	hr = pXMLDoc.CreateInstance(__uuidof(MSXML2::DOMDocument30));
    	if(!SUCCEEDED(hr))
    	{
    		MessageBox(NULL, "無法創建DOMDocument對象,請檢查是否安裝了MS XML Parser 運行庫!", "Error", MB_ICONERROR|MB_OK);
    		return -1;
    	}
    
    	// 創建頭節點
    	DOMProInstructionPtr pXmlProNode = pXMLDoc->createProcessingInstruction(_bstr_t("xml"),_bstr_t("version=\"1.0\" encoding = \"GB2312\""));
    	pXMLDoc->appendChild((MSXML2::IXMLDOMNodePtr)pXmlProNode);	
    	pXmlProNode.Detach();	//以后不再用的,卸掉
    
    	// 創建并添加根節點
    	// 創建一個節點
    	DOMElementPtr pXmlRoot = pXMLDoc->createElement("root");
    	// 添加到文檔中
    	pXMLDoc->appendChild(pXmlRoot);
    
    	// 創建一個節點
    	DOMElementPtr pGlobalNode = pXMLDoc->createElement("Globals");
    	// 添加到根節點中
    	pXmlRoot->appendChild(pGlobalNode);
    
    	// 添加兩個屬性
    	pGlobalNode->setAttribute("Attrib", "Value");
    	pGlobalNode->setAttribute("作用", "記錄全局數據");
    
    	DOMElementPtr pTempNode = pXMLDoc->createElement("Author");
    	pTempNode->Puttext("Ren.Xia");// 添加內容
    	pGlobalNode->appendChild(pTempNode);
    	pTempNode.Detach();
    
    	pTempNode = pXMLDoc->createElement("Date");
    	pTempNode->Puttext("2011-02-12");// 添加內容
    	pGlobalNode->appendChild(pTempNode);
    	pTempNode.Detach();
    	pGlobalNode.Detach();
    
    	// 在Root下創建Data子節點
    	DOMElementPtr pDataNode = pXMLDoc->createElement("Data");
    	pDataNode->setAttribute("Attrib", "Value");
    	pDataNode->setAttribute("作用", "記錄數據");
    	pXmlRoot->appendChild(pDataNode);
    
    	for (int i=0; i<100; ++i)
    	{
    		pTempNode = pXMLDoc->createElement("Data");
    		szText.Format("%d", i);
    		pTempNode->Puttext((_bstr_t)szText);
    		pDataNode->appendChild(pTempNode);
    		pTempNode.Detach();
    	}
    	pDataNode.Detach();
    
    	// 判斷名字是否為空
    	if (szXMLFile.IsEmpty())
    	{
    		pXmlRoot.Detach();
    		pXMLDoc.Detach();
    		return -2;
    	}
    
    	// 存儲并判斷是否成功
    	hr = pXMLDoc->save((LPCTSTR)szXMLFile);
    	pXmlRoot.Detach();
    	pXMLDoc.Detach();
    	if(!SUCCEEDED(hr))
    	{
    		MessageBox(NULL, "無法保存!", "Error", MB_ICONERROR|MB_OK);
    		return -3;
    	}	
    	MessageBox(NULL, "保存完畢!", "Error", MB_ICONASTERISK|MB_OK);
    	
    	// 卸掉COM,必須與CoInitialize對應
    	::CoUninitialize();
    	return 0;
    }


     

    另外如果知道一個節點的名字"Data",但是不知道在哪一層,那個樹下

    可以在查找時名字前加個"http://"這樣就表示在任意一層查找  

     

    pRootElem->selectSingleNode(" //Data");
     

     



      本文附件下載:
    • XML.rar (484.4 KB)
    posted @ 2011-02-14 14:17 CrackRen 閱讀(118) | 評論 (0)編輯 收藏

    //調用這個函數
    void CMainFrame::OnFullScreen()
    {	
    	// TODO: Add your command handler code here	
    	CRect WindowRect;
    	GetWindowRect(&WindowRect);
    	
    	CRect ClientRect;		
    	RepositionBars(0,0xffff,AFX_IDW_PANE_FIRST,reposQuery,&ClientRect);		
    	ClientToScreen(&ClientRect);
    		
    	//獲取屏幕的分辨率	
    	int nFullWidth=GetSystemMetrics(SM_CXSCREEN);		
    	int nFullHeight=GetSystemMetrics(SM_CYSCREEN);
    		
    	CRect m_FullScreenRect;
    	m_FullScreenRect.left=WindowRect.left-ClientRect.left;	
    	m_FullScreenRect.top=WindowRect.top-ClientRect.top;
    	m_FullScreenRect.right=WindowRect.right-ClientRect.right+nFullWidth;		
    	m_FullScreenRect.bottom=WindowRect.bottom-ClientRect.bottom+nFullHeight;
    	
    	//進入全屏顯示狀態		
    	WINDOWPLACEMENT wndpl;		
    	wndpl.rcNormalPosition=m_FullScreenRect;		
    	SetWindowPlacement(&wndpl);		
    }
    posted @ 2010-12-31 13:45 CrackRen 閱讀(85) | 評論 (0)編輯 收藏

    //在最開始的地方注冊快捷鍵
    //第一個參數是設置哪個窗口接收快捷鍵
    //第二個參數是代號,唯一的最好用GlobalAddAtom()函數得到一個值
    //第三個參數是特殊按鍵有MOD_CONTROL、MOD_SHIFT、MOD_ALT、MOD_WIN
    //第四個參數是快捷鍵最好大小的ASCII碼UINT型
    
    ::RegisterHotKey(GetSafeHwnd(), 0X4736, MOD_CONTROL|MOD_SHIFT, g_HotKey);
    
    
    //在窗口的PreTranslateMessage事件中添加檢測代碼
    BOOL CHotDlg::PreTranslateMessage(MSG* pMsg) 
    {
    	// TODO: Add your specialized code here and/or call the base class
    	if (pMsg->message == WM_HOTKEY && pMsg->wParam == 0X4736)
    	{
    		//要執行的功能
    	}
    
    	return CDialog::PreTranslateMessage(pMsg);
    }
    
    
    //退出的時候卸載注冊
    UnregisterHotKey(GetSafeHwnd(), 0X4736);
    
     
    posted @ 2010-12-31 13:21 CrackRen 閱讀(52) | 評論 (0)編輯 收藏

     

    // 發送WM_NCLBUTTONDOWN消息  
    // 使Windows認為鼠標在標題條上  
    
    PostMessage(WM_NCLBUTTONDOWN,HTCAPTION,MAKELPARAM(point.x, point.y));  
    
    posted @ 2010-12-31 13:15 CrackRen 閱讀(45) | 評論 (0)編輯 收藏
    主站蜘蛛池模板: 亚洲一级毛片在线播放| 亚洲男人的天堂一区二区| 亚洲视频免费一区| 四虎国产成人永久精品免费| 日本亚洲欧洲免费天堂午夜看片女人员 | 不卡一卡二卡三亚洲| 日韩在线一区二区三区免费视频| 免费乱理伦在线播放| 日韩一级片免费观看| 亚洲人成网7777777国产| 四虎国产精品免费永久在线| 亚洲av永久无码精品古装片| 久久免费观看国产99精品| 亚洲高清无在码在线无弹窗 | 99国产精品视频免费观看| 在线观看亚洲一区二区| 在线观看永久免费| 67194在线午夜亚洲| 日本免费的一级v一片| 青青视频免费在线| 亚洲乱码一区二区三区在线观看 | 精品国产免费一区二区三区香蕉 | 亚洲国产成人综合精品| 午夜亚洲av永久无码精品| a视频在线免费观看| 亚洲韩国在线一卡二卡| 国产一区二区三区在线免费观看 | 最近免费字幕中文大全视频| 亚洲精品国产国语| www国产亚洲精品久久久| 最近国语视频在线观看免费播放| 亚洲精品电影天堂网| 日韩精品视频免费网址| 两个人www免费高清视频| 亚洲人成毛片线播放| 免费在线观看一级毛片| 182tv免费视视频线路一二三| 国产亚洲人成在线影院| 亚洲人成电影福利在线播放| 日本免费中文字幕在线看| 暖暖在线视频免费视频|