?
對于像我這樣剛接觸MFC不久的人來說,MFC中的數據類型的確讓人很頭痛,需要不時地去查找MSDN,找的多了,就記下來了一部分,于是貼出來,加強記憶!
數據類型 | 意義 |
BOOL | Boolean值(TRUE? or FALSE) |
BSTR | 32-bit字符指針 |
BYTE | 8-bit整數,無正負號 |
COLORREF | 32-bit數值,代表一個顏色值 |
DWORD | 32-bit整數,無正負號 |
LONG | 32-bit整數,有正負號 |
LPARAM | 32-bit數值,作為窗口函數或callback函數的一個參數 |
LPCSTR | 32-bit指針,指向一個常數字符串 |
LPSTR | 32-bit指針,指向一個字符串 |
LPCTSTR | 32-bit指針,指向一個常數字符串。此字符串可移植到Unicode |
LPTSTR | 32-bit指針,指向一個字符串。此字符串可移植到Unicode |
LPVOID | 32-bit指針,指向一個未指定類型的數據 |
LPRESULT | 32-bit數值,作為窗口函數或callback函數的返回值 |
UINT | Win16中,16-bit無正負號,Win32中,32-bit無正負號 |
WNDPROC | 32-bit |
WORD | 16-bit整數,無正負號 |
WPARAM | 窗口函數的一個參數,Win16中16bits,Win32中32bits |
?
?
MFC獨特的數據類型
數據類型 | 意義 |
POSITION | 一個數值,代表collection對象(例如數組或鏈表)中的元素位置,常使用于MFC collection classes |
LPCRECT | 32-bit指針,指向一個不變的RECT結構 |
posted @
2006-05-11 09:00 炙熱的太陽 閱讀(1989) |
評論 (4) |
編輯 收藏
???? Google又有新創意了(Google的每一款新產品都給我帶來一些驚喜!),他的名字叫google網頁設計工具(Google Page Create),當然這仍然是google工程師利用它們的20%時間開發的,它給人的感覺就像是google做的一個blog。反正大家自己去看看吧!
???? google黑白報上的內容:
我們的目標是設計出我們的朋友和家人都喜歡而且易用的產品,經過數月的努力,我們很高興 Google Page Creator(Google 網頁設計工具)正式加入 Google 實驗室了。Google 實驗室一向是 Google 科技試驗的園地,里面有我們覺得激動人心、但可能還沒完全成熟的產品。希望早期使用者給我們的產品提意見,幫助我們不斷完善改進。
?????
???? 鏈接地址:Google Page Creator(Google 網頁設計工具)。
??
posted @
2006-05-09 08:53 炙熱的太陽 閱讀(596) |
評論 (0) |
編輯 收藏
約瑟夫(josephus)環是這樣的:假設有n個小孩坐成一個環,假如從第一個小孩開始數,如果數到m個小孩,則該小該離開,問最后留下的小孩是第幾個小孩?例如:總共有6個小孩,圍成一圈,從第一個小孩開始,每次數2個小孩,則游戲情況如下:
????小孩序號:1,2,3,4,5,6
????離開小孩序號:2,4,6,3,1
最后獲勝小孩序號:5
????這樣的問題,我可以先考慮輸入的內容有哪些?輸出內容有哪些?
????????要求用戶輸入的內容有:
?????????1、是小孩的個數,也就是n的值;
?????????2、是離開小孩的間隔是多少?也就是m的值。
?????????3、所有小孩的序號要求存在數組或者鏈表中,所以需要定義一個指針,這里我們用數組來存放小孩的序號。
????????而要求輸出的內容是:
?????????1、離開小孩的序號;
?????????2、最后留下小孩的序號;
所以,根據上面分析輸入輸出參數,我們考慮離開小孩的序號可以直接輸出,這樣可以使函數的復雜性。那么函數定義如下:
//輸入參數:
//Childs為指向一個整形指針,指向保存小孩數組的首地址;
//n為小孩的個數;
//m為數小孩的個數;
int?Josephus(int?*Child,int?n,int?m)


{
int?i=-1,j=0,k=1;
//開始數小孩,只到留下一個小孩
while(1)


{
//數m個小孩
??for(j=0;j<m;)

??
{
???i=(i+1)%n;????//取下標加1的模,當i的值在0到n-1之間循環
???if(Child[i]!=-1)?//小孩在環中則數數有效;
????j++;
???
??}

???if(k==n)????????????????????????//如果k==n則表示,此時數組中只留下一個小孩,
????break;??????????????????????????//序號為Child[i]中的值,跳出循環;
???cout<<Child[i]<<",";??//輸出離開小孩的序號;

???Child[i]=-1;???????????????//離開的小孩用-1作標記
???k=k+1;

}
cout<<endl;
return(Child[i]);????//返回最獲勝小孩的序號
}

完整的程序,在VC6中調試通過。
//-----------------------------------------------------------
#include<iostream.h>
int?Josephus(int?*Child,int?n,int?m);
void?main()


{
int?*allChild,j,k,l;
cin>>j>>k;

??if((allChild=?new?int[j])!=NULL)

??
{
????for(l=0;l<j;l++)

????
{??
?????cout<<l+1<<",";
?????allChild[l]=l+1;
????}
????cout<<endl;
????cout<<Josephus(allChild,j,k);
??}
}

int?Josephus(int?*Child,int?n,int?m)


{
int?i=-1,j=0,k=1;
while(1)


{
??for(j=0;j<m;)

??
{
???i=(i+1)%n;????
???if(Child[i]!=-1)?
????j++;
???
??}

???if(k==n)????????????????????????
????break;????????????????????????
???cout<<Child[i]<<",";??

???Child[i]=-1;?????????
???k=k+1;

}
cout<<endl;
return(Child[i]);????
}

posted @
2006-04-29 09:30 炙熱的太陽 閱讀(555) |
評論 (0) |
編輯 收藏
? 今天跟單位的人出去到郊外玩了一天,緊張了幾個星期的心情總算有一點放松,呵呵,過幾天項目就要驗收了,所以最近一直都在趕工作。玩了一天有點體會,那就是以后一定要加強體育鍛煉,不能把身體搞垮了。
posted @
2006-04-09 20:36 炙熱的太陽 閱讀(260) |
評論 (0) |
編輯 收藏
?
畢業半年多了,寫程序有半年了,今天突然間有點迷茫??我是不是要繼續做程序?我是不是做程序的材料?一連串的問題向我逼來,搞得我一下午沒有工作,于是乎上論壇,看大家討論,思考問題........
?? 莫非這就是人們所說的浮躁,我想可能是吧!人不免在某一件事上做久了,就會產生厭倦感,或者是一時間沒有了方向,又或者是沒有思想依靠,等等,如此之類。
?? 咳!想發一下感慨,可是怎么也想不起來要怎么寫,大學四年,文筆是徹底荒廢了,現在想拾起來,可又吐不出什么東西來,有時間寫上一大堆東西,回頭再一看,自己都想反胃,于是隨即刪掉,到最后,還是沒有寫出一點像樣的文章來。我比較喜歡林銳(大學十年的作者)的文風,風趣,灑脫又有內涵,我也一直想寫他那樣的文章來,好歹也算是給自己肯定一下。
?? 算了,又忘詞了,上面的已經是把腸子里的東西攪騰了好幾遍,不想再折騰自己,就這樣自己吧!繼續學習C++,繼續韓語學習,繼續努力!
posted @
2006-03-22 20:08 炙熱的太陽 閱讀(239) |
評論 (0) |
編輯 收藏
摘要: 當SP端和ISMG端建立Connect連接后,我們就要開始發送短信了,而Submit操作的目的是SP在與ISMG建立應用層連接后向ISMG提交短信。ISMG以Submit_Resp消息響應。下面還是要看它的消息定義:字段名字節數屬性描述Msg_Id8Unsigned Integer信息標識。Pk_total1Unsigned Integer相同Msg_Id的信息總條數,從1開始。Pk_number...
閱讀全文
posted @
2006-03-20 20:43 炙熱的太陽 閱讀(1861) |
評論 (0) |
編輯 收藏
? 前一陣子,我一直想再學一門外語,但害怕學一門新的外語太難,所以就一直沒有起步。在一次飯局上我聽一個同事說,韓語很簡單,一個星期基本上可以入門,很簡單的一門語言,而且又是從中文演變過去的,對中國人來說是比較簡單。加上最近中國盛行韓風,因此決定學習韓語。于是乎上書店買入門教程,上網上找資料,一個星期下來,嘿!發現韓語還真的挺簡單的,挺適合我這種懶散的人學習。可惜,我沒有下載朝鮮語插件,不然的我也用韓語寫一篇blog!
posted @
2006-03-17 08:24 炙熱的太陽 閱讀(687) |
評論 (10) |
編輯 收藏
CMPP協議的全稱是中國移動通信互聯網短信網關接口協議,它是聯想亞信公司根據SMMP協議為中國移動量身定做的,是符合中國國情的一個短信協議,閑話不多說了,說說CMPP的主要功能吧。(1)短信發送(short message mobile originate)MO,就是手機給SP發短信;(2)短信接受(short message mobile terminated)MT,這個就是SP給手機發的短信了,通常我們手機上收到的不良短信就是SP給我們的MT。CMPP協議的通信基礎是TCP/IP為底層通信承載的,連接方式是長連接方式。SP與ISMG之間,SMSC和ISMG之間的交互過程中均采用異步方式,即任一個網元在收到請求消息后應立即回應。
下面看看它的消息定義:CMPP中的消息分為消息頭和消息體。消息頭定義如下
字段名 |
字節數 |
類型 |
描述 |
Total_Length |
4 |
Unsigned Integer |
消息總長度(含消息頭及消息體) |
Command_Id |
4 |
Unsigned Integer |
命令或響應類型 |
Sequence_Id |
4 |
Unsigned Integer |
消息流水號,順序累加,步長為1,循環使用(一對請求和應答消息的流水號必須相同) |
那么下面就是SP連接到ISMG上了,看它的Bind連接消息定義
字段名 |
字節數 |
屬性 |
描述 |
Source_Addr |
6 |
Octet String |
源地址,此處為SP_Id,即SP的企業代碼。 |
AuthenticatorSource |
16 |
Octet String |
用于鑒別源地址。其值通過單向MD5 hash計算得出,表示如下:
AuthenticatorSource =
MD5(Source_Addr+9 字節的0 +shared secret+timestamp)
Shared secret 由中國移動與源地址實體事先商定,timestamp格式為:MMDDHHMMSS,即月日時分秒,10位。 |
Version |
1 |
Unsigned Integer |
雙方協商的版本號(高位4bit表示主版本號,低位4bit表示次版本號),對于3.0的版本,高4bit為3,低4位為0 |
Timestamp |
4 |
Unsigned Integer |
時間戳的明文,由客戶端產生,格式為MMDDHHMMSS,即月日時分秒,10位數字的整型,右對齊 。 |
根據上的定義我們可以寫出的代碼,如下,在VC環境下編寫的
/*
*函數功能:建立和CMPP網關的直接通路
*輸入條件:SP用戶名const char *UserName,SP密碼const char *PWD
*/
void Ccmpp_API::CmppConnect(const char *UserName, const char *PWD)
{
char netbuf[100];
CMPP_CONNECT *bufer;
bufer=(CMPP_CONNECT*)netbuf;
memset(bufer, 0, 100);
bufer->nTotalLength = htonl(39);//CMPP_CONNECT消息總長度
bufer->nCommandId = htonl(CMPP_CONNECT_tag);//消息標志
//自動產生SeqId號
if (sequenceid == 123456789i32)
{
sequenceid = 1;
}else{
sequenceid++;
}
bufer->nSeqId = htonl(sequenceid);
int MD5Len;
MD5_CTX md5;//MD5源字串
CTime TimeData = CTime::GetCurrentTime();
CString timestamp = TimeData.Format("%m%d%H%M%S");
unsigned char md5source[29];
int Len1 = strlen(UserName);
int Len2 = strlen(PWD);
MD5Len = Len1 + 9 +Len2 + timestamp.GetLength();
memset(md5source, 0, MD5Len);
memcpy(bufer->sSourceAddr, UserName, Len1);
memcpy(md5source, UserName, Len1);
for (int j = 0; j<Len2; j++)
{
md5source[j + Len1 + 9] = PWD[j];
}
for (int i=0;i<timestamp.GetLength();i++)
{
md5source[i + Len2 + Len1 + 9]=timestamp[i];
}
//進行md5加密轉換
md5.MD5Update(md5source, MD5Len);
md5.MD5Final(md5source);
memcpy(bufer->sAuthSource, md5source, 29);
bufer->cVersion = 0x30;
bufer->nTimeStamp = htonl(atoi(timestamp));
CmppSocket.Send(bufer, 39, 0);//把消息打包發送
return;
}
今天就到這,下次再寫,歡迎交流!
posted @
2006-03-15 07:58 炙熱的太陽 閱讀(9526) |
評論 (8) |
編輯 收藏