嵌入式基于Wince专辑个人通讯录代码.docx
《嵌入式基于Wince专辑个人通讯录代码.docx》由会员分享,可在线阅读,更多相关《嵌入式基于Wince专辑个人通讯录代码.docx(38页珍藏版)》请在冰豆网上搜索。
![嵌入式基于Wince专辑个人通讯录代码.docx](https://file1.bdocx.com/fileroot1/2022-12/30/22ef63fe-a9bb-4ce8-8a70-390703e119c2/22ef63fe-a9bb-4ce8-8a70-390703e119c21.gif)
嵌入式基于Wince专辑个人通讯录代码
//======================================================================
//AlbumDB-AWindowsCEdatabase
//
//WrittenforthebookProgrammingWindowsCE
//Copyright(C)2007DouglasBoling
//======================================================================
#include//ForallthatWindowsstuff
#include//ForWindowscontrolsmacros
#include//Commoncontrolincludes
#include"AlbumDB.h"//Program-specificstuff
//Thefileisspecifiedheresothereisnospecialprojectsettings
//forwindowsmobilecompiles.
#ifdefined(WIN32_PLATFORM_PSPC)
#include
#pragmacomment(lib,"aygshell")//Linkshelllibformenubar.
#endif
//----------------------------------------------------------------------
//Globaldata
//
constTCHARszAppName[]=TEXT("AlbumDB");
HINSTANCEhInst;//Programinstancehandle
HANDLEg_hDB=INVALID_HANDLE_VALUE;//Handletoalbumdatabase
CEOIDg_oidDB=0;//ObjectIDofthealbumdatabase
CEGUIDg_guidDB;//Guidfordatabasevolume
CENOTIFYREQUESTcenr;//Notifyrequeststructure.
intg_nLastSort=0;//Lastsortorderused
CEDBASEINFOEXg_diex;//Sortorderarray
//Thesetwovariablesrepresentaone-itemcachefor
//thelistviewcontrol.
intg_nLastItem=-1;
LPBYTEg_pLastRecord=0;
//MessagedispatchtableforMainWindowProc
conststructdecodeUINTMainMessages[]={
WM_CREATE,DoCreateMain,
WM_SIZE,DoSizeMain,
WM_COMMAND,DoCommandMain,
WM_NOTIFY,DoNotifyMain,
WM_DESTROY,DoDestroyMain,
WM_DBNOTIFICATION,DoDbNotifyMain,
};
//CommandmessagedispatchforMainWindowProc
conststructdecodeCMDMainCommandItems[]={
IDM_DELDB,DoMainCommandDelDB,
IDM_EXIT,DoMainCommandExit,
IDM_NEW,DoMainCommandNew,
IDM_EDIT,DoMainCommandEdit,
IDM_DELETE,DoMainCommandDelete,
IDM_SORTNAME,DoMainCommandSort,
IDM_SORTARTIST,DoMainCommandSort,
IDM_SORTCATEGORY,DoMainCommandSort,
IDM_ABOUT,DoMainCommandAbout,
};
//Albumcategorystrings;mustbealphabetical.
constTCHAR*pszCategories[]={TEXT("Family"),TEXT("Friends"),
TEXT("collague"),TEXT("mates")};
//======================================================================
//Programentrypoint
//
intWINAPIWinMain(HINSTANCEhInstance,HINSTANCEhPrevInstance,
LPWSTRlpCmdLine,intnCmdShow){
HWNDhwndMain;
MSGmsg;
intrc=0;
//Initializethisinstance.
hwndMain=InitInstance(hInstance,lpCmdLine,nCmdShow);
if(hwndMain==0)
return0x10;
//Applicationmessageloop
while(GetMessage(&msg,NULL,0,0)){
TranslateMessage(&msg);
DispatchMessage(&msg);
}
//Instancecleanup
returnTermInstance(hInstance,msg.wParam);
}
//----------------------------------------------------------------------
//InitInstance-Instanceinitialization
//
HWNDInitInstance(HINSTANCEhInstance,LPWSTRlpCmdLine,intnCmdShow){
HWNDhWnd;
WNDCLASSwc;
INITCOMMONCONTROLSEXicex;
#ifdefined(WIN32_PLATFORM_PSPC)||defined(WIN32_PLATFORM_WFSP)
//ForWindowsMobiledevices,allowonlyoneinstanceoftheapp
hWnd=FindWindow(szAppName,NULL);
if(hWnd){
SetForegroundWindow((HWND)(((DWORD)hWnd)|0x01));
return(HWND)-1;
}
#endif
//Saveprograminstancehandleinglobalvariable.
hInst=hInstance;
//CreateaguidforthedatabaseExfunctionsthatpoints
//totheobjectstore.
CREATE_SYSTEMGUID(&g_guidDB);
memset(&cenr,0,sizeof(cenr));//Initializethenotifyrequest.
//Initializedatabaseinfostructure.
memset(&g_diex,0,sizeof(g_diex));
g_diex.wVersion=CEDBASEINFOEX_VERSION;
g_diex.dwFlags=CEDB_VALIDNAME|CEDB_VALIDTYPE|
CEDB_VALIDSORTSPEC;
StringCchCopy(g_diex.szDbaseName,dim(g_diex.szDbaseName),
TEXT("\\Albums"));
g_diex.dwDbaseType=0;
g_diex.wNumSortOrder=3;
//Createsortpropertyarray
inti=0;
g_diex.rgSortSpecs[i].wVersion=SORTORDERSPECEX_VERSION;
g_diex.rgSortSpecs[i].wNumProps=2;
g_diex.rgSortSpecs[i].rgPropID[0]=PID_NAME;
g_diex.rgSortSpecs[i].rgdwFlags[0]=0;
g_diex.rgSortSpecs[i].rgPropID[1]=PID_CATEGORY;
g_diex.rgSortSpecs[i].rgdwFlags[1]=0;
i++;
g_diex.rgSortSpecs[i].wVersion=SORTORDERSPECEX_VERSION;
g_diex.rgSortSpecs[i].wNumProps=2;
g_diex.rgSortSpecs[i].rgPropID[0]=PID_ARTIST;
g_diex.rgSortSpecs[i].rgdwFlags[0]=0;
g_diex.rgSortSpecs[i].rgPropID[1]=PID_NAME;
g_diex.rgSortSpecs[i].rgdwFlags[1]=0;
i++;
g_diex.rgSortSpecs[i].wVersion=SORTORDERSPECEX_VERSION;
g_diex.rgSortSpecs[i].wNumProps=3;
g_diex.rgSortSpecs[i].rgPropID[0]=PID_CATEGORY;
g_diex.rgSortSpecs[i].rgdwFlags[0]=0;
g_diex.rgSortSpecs[i].rgPropID[1]=PID_ARTIST;
g_diex.rgSortSpecs[i].rgdwFlags[1]=0;
g_diex.rgSortSpecs[i].rgPropID[2]=PID_NAME;
g_diex.rgSortSpecs[i].rgdwFlags[2]=0;
//Registerapplicationmainwindowclass.
wc.style=0;//Windowstyle
wc.lpfnWndProc=MainWndProc;//Callbackfunction
wc.cbClsExtra=0;//Extraclassdata
wc.cbWndExtra=0;//Extrawindowdata
wc.hInstance=hInstance;//Ownerhandle
wc.hIcon=NULL,//Applicationicon
wc.hCursor=LoadCursor(NULL,IDC_ARROW);//Defaultcursor
wc.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
wc.lpszMenuName=NULL;//Menuname
wc.lpszClassName=szAppName;//Windowclassname
if(RegisterClass(&wc)==0)return0;
//Loadthecommandbarcommoncontrolclass.
icex.dwSize=sizeof(INITCOMMONCONTROLSEX);
icex.dwICC=ICC_BAR_CLASSES|ICC_TREEVIEW_CLASSES|
ICC_LISTVIEW_CLASSES;
InitCommonControlsEx(&icex);
//Createmainwindow.
hWnd=CreateWindowEx(0,szAppName,TEXT("AlbumDB"),WS_VISIBLE,
CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,
CW_USEDEFAULT,NULL,NULL,hInstance,NULL);
//Returnfailcodeifwindownotcreated.
if(!
IsWindow(hWnd))return0;
//Standardshowandupdatecalls
ShowWindow(hWnd,nCmdShow);
UpdateWindow(hWnd);
returnhWnd;
}
//----------------------------------------------------------------------
//TermInstance-Programcleanup
//
intTermInstance(HINSTANCEhInstance,intnDefRC){
//Closetheopeneddatabase.
if(g_hDB!
=INVALID_HANDLE_VALUE)
CloseHandle(g_hDB);
//Freethelastdbqueryifsaved.
ClearCache();
returnnDefRC;
}
//======================================================================
//MessagehandlingproceduresforMainWindow
//----------------------------------------------------------------------
//MainWndProc-Callbackfunctionforapplicationwindow
//
LRESULTCALLBACKMainWndProc(HWNDhWnd,UINTwMsg,WPARAMwParam,
LPARAMlParam){
inti;
//
//Searchmessagelisttoseeifweneedtohandlethis
//message.Ifinlist,callprocedure.
//
for(i=0;iif(wMsg==MainMessages[i].Code)
return(*MainMessages[i].Fxn)(hWnd,wMsg,wParam,lParam);
}
returnDefWindowProc(hWnd,wMsg,wParam,lParam);
}
//----------------------------------------------------------------------
//DoCreateMain-ProcessWM_CREATEmessageforwindow.
//
LRESULTDoCreateMain(HWNDhWnd,UINTwMsg,WPARAMwParam,
LPARAMlParam){
HWNDhwndCB,hwndChild;
intnHeight,nCnt;
RECTrect;
//ConvertlParamtopointertocreatestructure.
LPCREATESTRUCTlpcs=(LPCREATESTRUCT)lParam;
#ifdefined(WIN32_PLATFORM_PSPC)||defined(WIN32_PLATFORM_WFSP)
SHMENUBARINFOmbi;//ForWinMobile,create
memset(&mbi,0,sizeof(SHMENUBARINFO));//menubarsothatwe
mbi.cbSize=sizeof(SHMENUBARINFO);//haveasipbutton.
mbi.hwndParent=hWnd;
mbi.dwFlags=SHCMBF_EMPTYBAR;//Nomenu
SHCreateMenuBar(&mbi);
SetWindowPos(hWnd,0,0,0,lpcs->cx,lpcs->cy-26,
SWP_NOMOVE|SWP_NOZORDER);
#endif
//ConvertlParamtopointertocreatestructure.
lpcs=(LPCREATESTRUCT)lParam;
//Createaminimalcommandbarthathasonlyamenuandan
//exitbutton.
hwndCB=CommandBar_Create(hInst,hWnd,IDC_CMDBAR);
//Insertthemenu.
CommandBar_InsertMenubar(hwndCB,hInst,ID_MENU,0);
//Addexitbuttontocommandbar.
CommandBar_AddAdornments(hwndCB,0,0);
nHeight=CommandBar_Height(hwndCB);
//Openthealbumdatabase.Ifonedoesn'texist,createit.
g_hDB=OpenCreateDB(hWnd,&nCnt);
if(g_hDB==INVALID_HANDLE_VALUE){
MessageBox(hWnd,TEXT("Couldnotopendatabase."),szAppName,
MB_OK);
DestroyWindow(hWnd);
return0;
}
//Createthelistviewcontrolinrightpane.
SetRect(&rect,0,nHeight,lpcs->cx,lpcs->cy-nHeight);
hwndChild=CreateLV(hWnd,&rect);
//Destroyframeifwindownotcreated.
if(!
IsWindow(hwndChild)){
DestroyWindow(hWnd);
return0;
}
ListView_SetItemCount(hwndChild,nCnt);
return0;
}
//----------------------------------------------------------------------
//DoSizeMain-ProcessWM_SIZEmessageforwindow.
//
LRESULTDoSizeMain(HWNDhWnd,UINTwMsg,WPARAMwParam,LPARAMlParam){
HWNDhwndLV;
RECTrect;
hwndLV=GetDlgItem(hWnd,ID_LISTV);
//Adjustthesizeoftheclientrecttotakeintoaccount
//thecommandbarheight.
GetClientRect(hWnd,&rect);
rect.top+=CommandBar_Height(GetDlgItem(hWnd,IDC_CMDBAR));
SetWindowPos(hwndLV,NULL,rect.left,rect.top,
(rect.right-rect.left),rect.bottom-rect.top,
SWP_NOZORDER);
CommandBar_AlignAdornments(GetDlgItem(hWnd,IDC_CMDBAR));
return0;
}
//----------------------------------------------------------------------
//DoCommandMain-ProcessWM_COMMANDmessageforwindow.
//
LRESULTDoCommandMain(HWNDhWnd,UINTwMsg,WPARAMwParam,
LPARAMlParam){
WORDidItem,wNotifyCode;
HWNDhwndCtl;
inti;
//Parsetheparameters.
idItem=(WORD)LOWORD(wParam);
wNotifyCode=(WORD)HIWORD(wParam);
hwndCtl=(HWND)lParam;
//Callroutinetohandlecontrolmessage.
for(i=0;iif(idItem==MainCommandIt