📄 localmessage.cpp
字号:
hParentItem = TreeView_InsertItem(hwndTreeView, &tvInsert);
tvItem.pszText ="聊天消息";
tvInsert.item = tvItem;
tvInsert.hInsertAfter = TVI_LAST;
tvInsert.hParent = hParentItem;
ht1 = TreeView_InsertItem(hwndTreeView, &tvInsert);
if( this->InsertToTreeView(hwndTreeView,"C2CMsg",ht1,&ppstgOpen))
TreeView_DeleteItem(hwndTreeView,ht1);
tvItem.pszText ="系统消息";
tvInsert.item = tvItem;
tvInsert.hInsertAfter = TVI_LAST;
tvInsert.hParent = hParentItem;
ht2 = TreeView_InsertItem(hwndTreeView, &tvInsert);
if(this->InsertToTreeView(hwndTreeView,"SysMsg",ht2,&ppstgOpen))
TreeView_DeleteItem(hwndTreeView,ht2);
tvItem.pszText ="群组消息";
tvInsert.item = tvItem;
tvInsert.hInsertAfter = TVI_LAST;
tvInsert.hParent = hParentItem;
ht3 = TreeView_InsertItem(hwndTreeView, &tvInsert);
if(this->InsertToTreeView(hwndTreeView,"GroupMsg",ht3,&ppstgOpen))
TreeView_DeleteItem(hwndTreeView,ht3);
tvItem.pszText ="临时消息";
tvInsert.item = tvItem;
tvInsert.hInsertAfter = TVI_LAST;
tvInsert.hParent = hParentItem;
ht4 = TreeView_InsertItem(hwndTreeView, &tvInsert);
if(this->InsertToTreeView(hwndTreeView,"TempSessionMsg",ht4,&ppstgOpen))
TreeView_DeleteItem(hwndTreeView,ht4);
TreeView_Expand(hwndTreeView,hParentItem,TVE_TOGGLE);
ppstgOpen->Release();
return 0;
Ex:
char mm[21];
wsprintf(mm,"%08X",hr);
MessageBox(hwnd,error,mm,NULL);
return hr;
}
int LocalMessage::InsertToTreeView(HWND HwndTreeView,char * db,HTREEITEM TreeParent,IStorage** is)
{
TV_ITEM tvItem;
TV_INSERTSTRUCT tvInsert;
WCHAR wdb[50];
IStorage* pp = *is;
IStorage* ppstgOpen = NULL;
IEnumSTATSTG* ppenum =NULL;
HRESULT hr = S_OK;
char *error,QQMessageNumber[20];
char *pName;
STATSTG rgelt;
ULONG pceltFetched=1;
size_t NameLength;
int i=0;
memset((char *)wdb,0,100);
MultiByteToWideChar(CP_ACP,0,db,(int)strlen(db),wdb,50);
hr = pp->OpenStorage(wdb,NULL,0x12,NULL,NULL,&ppstgOpen);
if(FAILED(hr))
{
error = "读取数据库失败!";
goto Ex;
}
hr = ppstgOpen->EnumElements(NULL,NULL,NULL,&ppenum);
if(FAILED(hr))
{
error = "Failed ppstgOpen->EnumElements";
goto Ex;
}
while(pceltFetched)
{
hr = ppenum->Next(1,&rgelt,&pceltFetched);
if(FAILED(hr))
{
error = "Failed Next";
goto Ex;
}
if(rgelt.pwcsName)
{
ZeroMemory(QQMessageNumber,20);
WideCharToMultiByte(CP_ACP,0,rgelt.pwcsName,wcslen(rgelt.pwcsName),
QQMessageNumber,20,NULL,NULL);
pName =QQMessageNumber;
NameLength = strlen(pName);
if(NameLength>9 || NameLength<5)
goto conti;
while(*pName)
{
if(*pName<0x30 || *pName >0x39)
goto conti;
pName++;
}
tvItem.cChildren = false;
tvItem.pszText = QQMessageNumber;
tvItem.mask = TVIF_TEXT |TVIF_CHILDREN;
tvInsert.item = tvItem;
tvInsert.hInsertAfter = TVI_LAST;
tvInsert.hParent = TreeParent;
TreeView_InsertItem(HwndTreeView, &tvInsert);
i++;
}
conti:;
}
ppenum->Release();
ppstgOpen->Release();
if(i==0)
return 1;
return 0;
Ex:
char tem[100];
wsprintf(tem,"操作数据库%s",db);
//MessageBox(hwnd,error,tem,NULL);
if(ppenum)
ppenum->Release();
if(ppstgOpen)
ppstgOpen->Release();
return 1;
}
int LocalMessage::WndSize(WPARAM wParam,LPARAM lParam)
{
MoveWindow(MainWindowStruct[0].hwnd,0,0,TreeWidth,HIWORD(lParam),true);
MoveWindow(MainWindowStruct[1].hwnd,TreeWidth+2,0,LOWORD(lParam)-TreeWidth-2,HIWORD(lParam)-ListHight,true);
MoveWindow(MainWindowStruct[2].hwnd,TreeWidth+2,
HIWORD(lParam)-ListHight+30,LOWORD(lParam)-TreeWidth-2,ListHight-30,true);
return 0;
}
LRESULT APIENTRY WndSplit(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch(message)
{
case WM_MOUSEMOVE:
MessageBeep(0);
break;
}
//WM_NCMOUSEMOVE
return CallWindowProc(wpOrigEditProc, hwnd, message,wParam, lParam);
}
int LocalMessage::WndMouseMove(WPARAM wParam,LPARAM lParam)
{
char tem[10];
RECT rect;
GetClientRect(hwnd,&rect);
if(LOWORD(lParam)==TreeWidth || LOWORD(lParam)==(TreeWidth+1))
{
wsprintf(tem,"%2d",LOWORD(lParam));
//SetWindowText(hwnd,tem);
//SetCursor(LoadCursor(hInstance,IDC_HAND));
//ShowCursor(true);
if(wParam==MK_LBUTTON)
{
SetCapture(hwnd);
//MessageBeep(0);
//SendMessage(hwnd,WM_SIZE,)
}
}
if((HIWORD(lParam)==(rect.bottom -ListHight+28))||(HIWORD(lParam)==(rect.bottom -ListHight+29))&&LOWORD(lParam)>TreeWidth)
{
wsprintf(tem,"%2d",HIWORD(lParam));
//SetWindowText(hwnd,tem);
}
return 0;
}
int LocalMessage::ViewNameToDbName(char * name)
{
if(strcmp(name,"聊天消息")==0)
{
ZeroMemory(name,50);
strcpy(name,"C2CMsg");
MessageColum =1;
return 1;
}
if(strcmp(name,"系统消息")==0)
{
ZeroMemory(name,50);
strcpy(name,"SysMsg");
MessageColum =2;
return 2;
}
if(strcmp(name,"群组消息")==0)
{
ZeroMemory(name,50);
strcpy(name,"GroupMsg");
MessageColum =3;
return 3;
}
if(strcmp(name,"临时消息")==0)
{
ZeroMemory(name,50);
strcpy(name,"TempSessionMsg");
MessageColum =4;
return 4;
}
return 0;
}
int LocalMessage::ReadData(char * CurrentGroup,char * CurrentQQNumber,char ** pIndex,char ** pData,int * IndexLength,int * DataLength)
{
IStorage* ppstgOpen = NULL;
IStorage* ppstgOpen1 = NULL;
IStorage* ppstgOpen2 = NULL;
char *Index =NULL;
char *Data =NULL;
WCHAR TemPath[MAX_PATH];
WCHAR TemGroup[50],TemQQNumber[20];
HRESULT hr = S_OK;
char *error;
memset((char *)TemPath,0,(MAX_PATH*2));
memset((char *)TemGroup,0,100);
memset((char *)TemQQNumber,0,40);
MultiByteToWideChar(CP_ACP,0,QQDatabasePath,
(int)strlen(QQDatabasePath),TemPath,MAX_PATH);
MultiByteToWideChar(CP_ACP,0,CurrentGroup,
(int)strlen(CurrentGroup),TemGroup,50);
MultiByteToWideChar(CP_ACP,0,CurrentQQNumber,
(int)strlen(CurrentQQNumber),TemQQNumber,20);
hr = StgOpenStorage(TemPath,NULL,0x12,NULL,NULL,&ppstgOpen);
if(FAILED(hr))
{
error = "打开数据库失败!";
goto Ex;
}
hr = ppstgOpen->OpenStorage(TemGroup,NULL,0x12,NULL,NULL,&ppstgOpen1);
if(FAILED(hr))
{
error = "ppstgOpen1!";
goto Ex;
}
hr =ppstgOpen1->OpenStorage(TemQQNumber,NULL,0x12,NULL,NULL,&ppstgOpen2);
if(FAILED(hr))
{
error = "&ppstgOpen2";
goto Ex;
}
IStream *ppstm =NULL;
STATSTG rgelt;
ULONG DataLength0=0;
hr = ppstgOpen2->OpenStream(L"Index.msj",NULL,0x12,NULL,&ppstm);
if(FAILED(hr))
{
error = "&ppstm Index.msj";
goto Ex;
}
ppstm->Stat(&rgelt,NULL);
if(rgelt.cbSize.LowPart==0)
goto Ex;
Index = (char *)malloc_(rgelt.cbSize.LowPart+8);
ZeroMemory(Index,rgelt.cbSize.LowPart+8);
hr = ppstm->Read(Index,rgelt.cbSize.LowPart,&DataLength0);
if(FAILED(hr))
{
error = "Read error";
free(Index);
ppstm->Release();
goto Ex;
}
*IndexLength =(rgelt.cbSize.LowPart/4);
ppstm->Release();
hr = ppstgOpen2->OpenStream(L"Data.msj",NULL,0x12,NULL,&ppstm);
if(FAILED(hr))
{
error = "&ppstm Data.msj";
goto Ex;
}
ppstm->Stat(&rgelt,NULL);
if(rgelt.cbSize.LowPart==0)
goto Re;
Data = (char *)malloc_(rgelt.cbSize.LowPart+8);
ZeroMemory(Data,rgelt.cbSize.LowPart+8);
hr = ppstm->Read(Data,rgelt.cbSize.LowPart,&DataLength0);
if(FAILED(hr))
{
error = "Read error";
free(Data);
ppstm->Release();
goto Ex;
}
*DataLength =rgelt.cbSize.LowPart;
*pIndex = Index;
*pData = Data;
Re:
ppstm->Release();
ppstgOpen2->Release();
ppstgOpen1->Release();
ppstgOpen->Release();
return 0;
Ex:
//MessageBox(hwnd,error,"",0);
if(ppstgOpen2)
ppstgOpen2->Release();
if(ppstgOpen1)
ppstgOpen1->Release();
if(ppstgOpen)
ppstgOpen->Release();
return 1;
}
int LocalMessage::DecodeMessage(char * message,int Length,int * Index,int number)
{
char *pout;
int i;
int MessageLength=0;
for(i =0;i<number;i++)
{
if(Index[i+1]==0)
Index[i+1]=Length;
MessageLength =Index[i+1]-Index[i];
pout = (char *)malloc(MessageLength);
memset(pout,0,MessageLength);
decode(message+Index[i],MessageLength,DecryptPassword,pout,&MessageLength);
memcpy(message+Index[i],pout,MessageLength);
free(pout);
}
return 0;
}
int LocalMessage::List_Notify(LPARAM lParam)
{
char *text;
switch(((LPNMHDR)lParam)->code)
{
case NM_CLICK:
case NM_RCLICK:
text=(char *)malloc_(0x2000);
ListView_GetItemText(((NMITEMACTIVATE *)lParam)->hdr.hwndFrom,
((NMITEMACTIVATE *)lParam)->iItem,3,text,0x2000);
SetWindowText(MainWindowStruct[2].hwnd,text);
free_(text);
break;
}
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -