WindowsCEアプリケーション開発(EVCベース)
1
、
現在のプロセスの
HINSTANCE
HMODULE hModule =::GetModuleHandle(NULL);
HINSTANCE hInst = hModule;
2
、現在のプロセスの絶対パスを得る
GetModuleFileName()関数.この関数の最初のパラメータがNULLの場合、最後のWM_の発行を返します.CREATメッセージのファイルの絶対パス.
3
、ステータスバー上のアプリケーションのアイコンを手動で作成する
CreateStatusIcon関数は、CreateIconIndirectを呼び出して16 x 16アイコンを手動で作成することです.
4
、ポイント・ツー・ポイント・メッセージ・キューによるプロセス間通信
CreateMsgQueue();
OpenMsgQueue();
GetMsgQueueInfo();
ReadMsgQueue();
WriteMsgQueue();
CloseMsgQueue();
RequestDeviceNotifications();
5.taskbarを隠すいくつかの方法:
5.1フルスクリーン時非表示、フルスクリーン終了時表示、この場合はまずFindwindow(「HHTASKBAR」)を作成し、movewindowでフルスクリーン範囲外に移動し、必要に応じて移動する
5.2ずっと隠している(つまりシステムが立ち上がってからtaskbarを見たくない)、Findwindowとshowwindowで実現することもできるし、taskbarを修正することもできる.cpp(public/shell/oak/hpc/explorer/taskbar/)のCTaskBar::Register関数を直接trueに戻す
5.3ダイナミック表示と非表示でplatformを変更できます.regファイル
HKEY_LOCAL_MACHINESoftwareMicrosoftShellAutoHide("default"=dword:1)とHKEY_LOCAL_MACHINESoftwareMicrosoftShellOnTop(「default」=dword:0)およびHKEY_LOCAL_MACHINE\Software\Microsoft\Shell\SlideTaskBar("default"=dword:0)
6.ソフトウェアディスク操作の関数:
SipGetInfo(&si)
SipSetInfo(&si)
SipShowIM(SIPF_ON)
7.スタートアッププログラムを追加または削除するには:
ここでcpp(public/shell/oak/hpc/explorer/taskbar)ではstmenuDataという構造体配列に対してメンバーを追加または削除する
8.ストリームドライバレジストリのindex:
ドライバのプレフィックスprefixは3つの大文字で表され、indexはドライバのインデックスであることはよく知られています.アプリケーションでcreatefileでデバイスを開くと、この関数の最初のパラメータはprefixとindexの組み合わせです.
9.EVCでWebプログラムを開く
SHELLEXECUTEINFO ShExecInfo = {0}; ShExecInfo.cbSize = sizeof(SHELLEXECUTEINFO); ShExecInfo.fMask = SEE_MASK_NOCLOSEPROCESS; ShExecInfo.hwnd = NULL; ShExecInfo.lpVerb = NULL; ShExecInfo.lpFile = TEXT("[url]http://www.163.com[/url]"); ShExecInfo.lpParameters =NULL; ShExecInfo.lpDirectory = NULL; ShExecInfo.nShow = SW_SHOWNORMAL; ShellExecuteEx(&ShExecInfo);
10.設備情報の取得
機器OEM情報を取得する:
TCHAR wszMachineName[128];SystemParametersInfo(SPI_GETOEMINFO, sizeof(wszMachineName),&wszMachineName, 0);
プラットフォーム情報の取得:
TCHAR wszVersion[256]; SystemParametersInfo(SPI_GETPLATFORMTYPE, sizeof(wszVersion),&wszVersion, 0);
11.wince画面の回転
Windows CE 4.0からは、DEVMODE構造に1つの属性dmDisplayOrientationが追加され、画面回転モードを取得または設定することができます.これに対応する値は次のとおりです.DMDO_0回転しないDMDO_90回転90度DMDO_180回転180度DMDO_270回転270度
画面回転モードの切り替えは、DEVMODE devmode={0};devmode.dmSize = sizeof(DEVMODE);devmode.dmDisplayOrientation = DMDO_90;//水平モードdmFields = DM_DISPLAYORIENTATION;ChangeDisplaySettingsEx(NULL, &devmode, NULL, 0, NULL);
現在のモードを取得するコードは以下の通りである:DEVMODE devmode={0};devmode.dmSize = sizeof(DEVMODE);devmode.dmFields = DM_DISPLAYORIENTATION;ChangeDisplaySettingsEx(NULL, &devmode, 0, CDS_TEST, NULL);devmodeを通ります.dmDisplayOrientationの値は、現在のモードを判断します.
このようにスイッチングモードは永続的ではなく,デバイスが再起動すると初期状態に戻ることに注目すべきである.切り替えた画面モードを保持する必要がある場合は、レジストリのHKEY_を設定します.LOCAL_MACHINESystemGDIRotationの2つのキー値はAngle-DWORD(0,90,180,270)LandscapeMode-DWORD(0,1)を実現する
12.スクリーンをコピーしてbmpピクチャとして保存する
void SaveDCToBMP(HDC hDC,int nStartX,int nStartY,int nWidth,int nHeight,LPCTSTR szFileName){//グラフィック色の深さint iPixel=32を定義する;
、
現在のプロセスの
HINSTANCE
HMODULE hModule =::GetModuleHandle(NULL);
HINSTANCE hInst = hModule;
2
、現在のプロセスの絶対パスを得る
GetModuleFileName()関数.この関数の最初のパラメータがNULLの場合、最後のWM_の発行を返します.CREATメッセージのファイルの絶対パス.
3
、ステータスバー上のアプリケーションのアイコンを手動で作成する
CreateStatusIcon関数は、CreateIconIndirectを呼び出して16 x 16アイコンを手動で作成することです.
4
、ポイント・ツー・ポイント・メッセージ・キューによるプロセス間通信
CreateMsgQueue();
OpenMsgQueue();
GetMsgQueueInfo();
ReadMsgQueue();
WriteMsgQueue();
CloseMsgQueue();
RequestDeviceNotifications();
5.taskbarを隠すいくつかの方法:
5.1フルスクリーン時非表示、フルスクリーン終了時表示、この場合はまずFindwindow(「HHTASKBAR」)を作成し、movewindowでフルスクリーン範囲外に移動し、必要に応じて移動する
5.2ずっと隠している(つまりシステムが立ち上がってからtaskbarを見たくない)、Findwindowとshowwindowで実現することもできるし、taskbarを修正することもできる.cpp(public/shell/oak/hpc/explorer/taskbar/)のCTaskBar::Register関数を直接trueに戻す
5.3ダイナミック表示と非表示でplatformを変更できます.regファイル
HKEY_LOCAL_MACHINESoftwareMicrosoftShellAutoHide("default"=dword:1)とHKEY_LOCAL_MACHINESoftwareMicrosoftShellOnTop(「default」=dword:0)およびHKEY_LOCAL_MACHINE\Software\Microsoft\Shell\SlideTaskBar("default"=dword:0)
6.ソフトウェアディスク操作の関数:
SipGetInfo(&si)
SipSetInfo(&si)
SipShowIM(SIPF_ON)
7.スタートアッププログラムを追加または削除するには:
ここでcpp(public/shell/oak/hpc/explorer/taskbar)ではstmenuDataという構造体配列に対してメンバーを追加または削除する
8.ストリームドライバレジストリのindex:
ドライバのプレフィックスprefixは3つの大文字で表され、indexはドライバのインデックスであることはよく知られています.アプリケーションでcreatefileでデバイスを開くと、この関数の最初のパラメータはprefixとindexの組み合わせです.
9.EVCでWebプログラムを開く
SHELLEXECUTEINFO ShExecInfo = {0}; ShExecInfo.cbSize = sizeof(SHELLEXECUTEINFO); ShExecInfo.fMask = SEE_MASK_NOCLOSEPROCESS; ShExecInfo.hwnd = NULL; ShExecInfo.lpVerb = NULL; ShExecInfo.lpFile = TEXT("[url]http://www.163.com[/url]"); ShExecInfo.lpParameters =NULL; ShExecInfo.lpDirectory = NULL; ShExecInfo.nShow = SW_SHOWNORMAL; ShellExecuteEx(&ShExecInfo);
10.設備情報の取得
機器OEM情報を取得する:
TCHAR wszMachineName[128];SystemParametersInfo(SPI_GETOEMINFO, sizeof(wszMachineName),&wszMachineName, 0);
プラットフォーム情報の取得:
TCHAR wszVersion[256]; SystemParametersInfo(SPI_GETPLATFORMTYPE, sizeof(wszVersion),&wszVersion, 0);
11.wince画面の回転
Windows CE 4.0からは、DEVMODE構造に1つの属性dmDisplayOrientationが追加され、画面回転モードを取得または設定することができます.これに対応する値は次のとおりです.DMDO_0回転しないDMDO_90回転90度DMDO_180回転180度DMDO_270回転270度
画面回転モードの切り替えは、DEVMODE devmode={0};devmode.dmSize = sizeof(DEVMODE);devmode.dmDisplayOrientation = DMDO_90;//水平モードdmFields = DM_DISPLAYORIENTATION;ChangeDisplaySettingsEx(NULL, &devmode, NULL, 0, NULL);
現在のモードを取得するコードは以下の通りである:DEVMODE devmode={0};devmode.dmSize = sizeof(DEVMODE);devmode.dmFields = DM_DISPLAYORIENTATION;ChangeDisplaySettingsEx(NULL, &devmode, 0, CDS_TEST, NULL);devmodeを通ります.dmDisplayOrientationの値は、現在のモードを判断します.
このようにスイッチングモードは永続的ではなく,デバイスが再起動すると初期状態に戻ることに注目すべきである.切り替えた画面モードを保持する必要がある場合は、レジストリのHKEY_を設定します.LOCAL_MACHINESystemGDIRotationの2つのキー値はAngle-DWORD(0,90,180,270)LandscapeMode-DWORD(0,1)を実現する
12.スクリーンをコピーしてbmpピクチャとして保存する
void SaveDCToBMP(HDC hDC,int nStartX,int nStartY,int nWidth,int nHeight,LPCTSTR szFileName){//グラフィック色の深さint iPixel=32を定義する;
//
LPBITMAPINFO lpbmih = new BITMAPINFO;
lpbmih->bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
lpbmih->bmiHeader.biWidth = nWidth;
lpbmih->bmiHeader.biHeight = nHeight;
lpbmih->bmiHeader.biPlanes = 1;
lpbmih->bmiHeader.biBitCount = iPixel;
lpbmih->bmiHeader.biCompression = BI_RGB;
lpbmih->bmiHeader.biSizeImage = 0;
lpbmih->bmiHeader.biXPelsPerMeter = 0;
lpbmih->bmiHeader.biYPelsPerMeter = 0;
lpbmih->bmiHeader.biClrUsed = 0;
lpbmih->bmiHeader.biClrImportant = 0;
//
HDC hdcMem;
HBITMAP hBitMap = NULL;
CBitmap *pBitMap = NULL;
CDC *pMemDC = NULL;
BYTE *pBits;
hdcMem = CreateCompatibleDC(hDC);
hBitMap = CreateDIBSection(hdcMem,lpbmih,DIB_PAL_COLORS,(void **)&pBits,NULL,0);
pBitMap = new CBitmap;
pBitMap->Attach(hBitMap);
pMemDC = new CDC;
pMemDC->Attach(hdcMem);
pMemDC->SelectObject(pBitMap);
pMemDC->BitBlt(0,0,nWidth,nHeight,CDC::FromHandle(hDC),nStartX,nStartY,SRCCOPY);
BITMAPFILEHEADER bmfh;//
ZeroMemory(&bmfh,sizeof(BITMAPFILEHEADER));
*((char *)&bmfh.bfType) = 'B';
*(((char *)&bmfh.bfType) + 1) = 'M';
bmfh.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER);
bmfh.bfSize = bmfh.bfOffBits + (nWidth * nHeight) * iPixel / 8;
int iBMPBytes = nWidth * nHeight * iPixel / 8;
CFile file;
if(file.Open(szFileName,CFile::modeWrite | CFile::modeCreate))
{
file.Write(&bmfh,sizeof(BITMAPFILEHEADER));
file.Write(&(lpbmih->bmiHeader),sizeof(BITMAPINFOHEADER));
file.Write(pBits,iBMPBytes);
file.Close();
}
DeleteObject(hBitMap);
DeleteObject(hDC);
pMemDC->DeleteDC();
delete pMemDC; pMemDC = NULL;
delete pBitMap; pBitMap = NULL;
delete lpbmih; lpbmih = NULL;
}
13.
0409 // Enaglish US
0404 //
0804 //
GetSystemDefaultLangID()) GetUserDefaultLangID()
switch(GetSystemDefaultLangID()/*GetUserDefaultLangID()*/) {
case 0x0804:
break;
case 0x0404:
break;
case 0x0409:
break;
}