顯示具有 WindowsCE 標籤的文章。 顯示所有文章
顯示具有 WindowsCE 標籤的文章。 顯示所有文章

2.25.2011

Buildrel -- sharing violation

奇怪,在某些 workspace 作 buildrel 會出現 sharing violation。
所以去找 buildrel.bat ==> 在 C:\WINCE500\PUBLIC\COMMON\OAK\MISC 找到。

打開後,在第 20 行加上 echo on,再 run 一次 buildrel,這樣每個動作就都會印出來。
然後找到..
C:\WINCE500\PLATFORM\SMDK2416>xcopy /q /c
C:\WINCE500\PBWorkspaces\Core2416\WINCE500\smdk2416_ARMV4I\oak\Files\nlscpg.txt
C:\WINCE500\PBWorkspaces\Core2416\RelDir\smdk2416_ARMV4I_Release
Sharing violation
0 File(s) copied


這個看起來好像是一個 FAQ 了: http://social.msdn.microsoft.com/Forums/en-US/winembplatdev/thread/49926e06-d048-4b95-827f-ab17e97d8f88/
而且好像就發生在 nlscpg.txt 這個檔。

MS 好像沒有要 fix 的意思。
只有在 buildrel 的 document 有一項:
如果發生 sharing violation error,請用 copy 不要用 copylink

!!! 天那!! copy 的話要花好久時間 !!

9.07.2010

接上 USB ActiveSync 後,一連線上就中斷,然後反覆。

這是因為由 KITL image 換成 NOKITL後,沒有重新sysgen 的關係。
>blddemo clean -q後,就可以了。

8.12.2010

Modify DDCAPS for CE 6.0

DDCAPS 是 platform builder 提供,偵測 platform 支援 directdraw 的程度。
但是 CE 6.0 後,DirectDraw interface 大幅改變,所以這個 code 就不能用了。要修改後才行。

修改後的 code:

Index: ddcaps.c
===================================================================
--- ddcaps.c (revision 23142)
+++ ddcaps.c (working copy)
@@ -74,7 +74,7 @@
LPDWORD caps;
LPCAPSDEFSTYPE defs;

-} gCaps[10];
+} gCaps[12];

struct
{
@@ -102,131 +102,83 @@
LPDIRECTDRAW lpDD; // DirectDraw object

// Map caps bits to readable strings
-CAPSDEFSTYPE ddCapsDefs[MAX_BOXES] =
-{
- {TEXT("3D"), DDCAPS_3D},
- {TEXT("ALIGNBOUNDARYDEST"), DDCAPS_ALIGNBOUNDARYDEST},
- {TEXT("ALIGNSIZEDEST"), DDCAPS_ALIGNSIZEDEST},
- {TEXT("ALIGNBOUNDARYSRC"), DDCAPS_ALIGNBOUNDARYSRC},
- {TEXT("ALIGNSIZESRC"), DDCAPS_ALIGNSIZESRC},
- {TEXT("ALIGNSTRIDE"), DDCAPS_ALIGNSTRIDE},
- {TEXT("BLT"), DDCAPS_BLT},
- {TEXT("BLTQUEUE"), DDCAPS_BLTQUEUE},
- {TEXT("BLTFOURCC"), DDCAPS_BLTFOURCC},
- {TEXT("BLTSTRETCH"), DDCAPS_BLTSTRETCH},
- {TEXT("GDI"), DDCAPS_GDI},
- {TEXT("OVERLAY"), DDCAPS_OVERLAY},
- {TEXT("OVERLAYCANTCLIP"), DDCAPS_OVERLAYCANTCLIP},
- {TEXT("OVERLAYFOURCC"), DDCAPS_OVERLAYFOURCC},
- {TEXT("OVERLAYSTRETCH"), DDCAPS_OVERLAYSTRETCH},
- {TEXT("PALETTE"), DDCAPS_PALETTE},
- {TEXT("PALETTEVSYNC"), DDCAPS_PALETTEVSYNC},
- {TEXT("READSCANLINE"), DDCAPS_READSCANLINE},
- {TEXT("STEREOVIEW"), DDCAPS_STEREOVIEW},
- {TEXT("VBI"), DDCAPS_VBI},
- {TEXT("ZBLTS"), DDCAPS_ZBLTS},
- {TEXT("ZOVERLAYS"), DDCAPS_ZOVERLAYS},
- {TEXT("COLORKEY"), DDCAPS_COLORKEY},
- {TEXT("ALPHA"), DDCAPS_ALPHA},
- {TEXT("CKEYHWASSIST"), DDCAPS_COLORKEYHWASSIST},
- {TEXT("NOHARDWARE"), DDCAPS_NOHARDWARE},
- {TEXT("BLTCOLORFILL"), DDCAPS_BLTCOLORFILL},
- {TEXT("BANKSWITCHED"), DDCAPS_BANKSWITCHED},
- {TEXT("BLTDEPTHFILL"), DDCAPS_BLTDEPTHFILL},
- {TEXT("CANCLIP"), DDCAPS_CANCLIP},
- {TEXT("CANCLIPSTRETCHED"), DDCAPS_CANCLIPSTRETCHED},
-};

+
CAPSDEFSTYPE CKeyCapsDefs[MAX_BOXES] =
{
- {TEXT("DESTBLT"), DDCKEYCAPS_DESTBLT},
- {TEXT("DESTBLTCLRSPACE"), DDCKEYCAPS_DESTBLTCLRSPACE},
+ {TEXT("BOTHBLT"), DDCKEYCAPS_BOTHBLT},
+ {TEXT("DESTBLT"), DDCKEYCAPS_DESTBLT },
+ {TEXT("DESTBLTCLRSPACE"), DDCKEYCAPS_DESTBLTCLRSPACE },
{TEXT("DESTBLTCLRSPACEYUV"), DDCKEYCAPS_DESTBLTCLRSPACEYUV},
- {TEXT("DESTBLTYUV"), DDCKEYCAPS_DESTBLTYUV},
- {TEXT("DESTOVERLAY"), DDCKEYCAPS_DESTOVERLAY},
- {TEXT("DESTOVERLAYCLRSPACE"), DDCKEYCAPS_DESTOVERLAYCLRSPACE},
- {TEXT("DESTOVERLAYCLRSPACEYUV"), DDCKEYCAPS_DESTOVERLAYCLRSPACEYUV},
- {TEXT("DESTOVERLAYONEACTIVE"), DDCKEYCAPS_DESTOVERLAYONEACTIVE},
- {TEXT("DESTOVERLAYYUV"), DDCKEYCAPS_DESTOVERLAYYUV},
- {TEXT("SRCBLT"), DDCKEYCAPS_SRCBLT},
+ {TEXT("SRCBLT"), DDCKEYCAPS_SRCBLT },
{TEXT("SRCBLTCLRSPACE"), DDCKEYCAPS_SRCBLTCLRSPACE},
- {TEXT("SRCBLTCLRSPACEYUV"), DDCKEYCAPS_SRCBLTCLRSPACEYUV},
- {TEXT("SRCBLTYUV"), DDCKEYCAPS_SRCBLTYUV},
- {TEXT("SRCOVERLAY"), DDCKEYCAPS_SRCOVERLAY},
- {TEXT("SRCOVERLAYCLRSPACE"), DDCKEYCAPS_SRCOVERLAYCLRSPACE},
- {TEXT("SRCOVERLAYCLRSPACEYUV"), DDCKEYCAPS_SRCOVERLAYCLRSPACEYUV},
- {TEXT("SRCOVERLAYONEACTIVE"), DDCKEYCAPS_SRCOVERLAYONEACTIVE},
- {TEXT("SRCOVERLAYYUV"), DDCKEYCAPS_SRCOVERLAYYUV}
+ {TEXT("SRCBLTCLRSPACEYUV"), DDCKEYCAPS_SRCBLTCLRSPACEYUV },
};

-CAPSDEFSTYPE FXCapsDefs[MAX_BOXES] =
-{
- { TEXT("BLTARITHSTRETCHY"), DDFXCAPS_BLTARITHSTRETCHY },
- { TEXT("BLTARITHSTRETCHYN"), DDFXCAPS_BLTARITHSTRETCHYN },
- { TEXT("BLTMIRRORLEFTRIGHT"), DDFXCAPS_BLTMIRRORLEFTRIGHT },
- { TEXT("BLTMIRRORUPDOWN"), DDFXCAPS_BLTMIRRORUPDOWN },
- { TEXT("BLTROTATION"), DDFXCAPS_BLTROTATION },
- { TEXT("BLTROTATION90"), DDFXCAPS_BLTROTATION90 },
- { TEXT("BLTSHRINKX"), DDFXCAPS_BLTSHRINKX },
- { TEXT("BLTSHRINKXN"), DDFXCAPS_BLTSHRINKXN },
- { TEXT("BLTSHRINKY"), DDFXCAPS_BLTSHRINKY },
- { TEXT("BLTSHRINKYN"), DDFXCAPS_BLTSHRINKYN },
- { TEXT("BLTSTRETCHX"), DDFXCAPS_BLTSTRETCHX },
- { TEXT("BLTSTRETCHXN"), DDFXCAPS_BLTSTRETCHXN },
- { TEXT("BLTSTRETCHY"), DDFXCAPS_BLTSTRETCHY },
- { TEXT("BLTSTRETCHYN"), DDFXCAPS_BLTSTRETCHYN },
- { TEXT("OVERLAYARITHSTRETCHY"), DDFXCAPS_OVERLAYARITHSTRETCHY },
- { TEXT("OVERLAYARITHSTRETCHYN"), DDFXCAPS_OVERLAYARITHSTRETCHYN },
- { TEXT("OVERLAYSHRINKX"), DDFXCAPS_OVERLAYSHRINKX },
- { TEXT("OVERLAYSHRINKXN"), DDFXCAPS_OVERLAYSHRINKXN },
- { TEXT("OVERLAYSHRINKY"), DDFXCAPS_OVERLAYSHRINKY },
- { TEXT("OVERLAYSHRINKYN"), DDFXCAPS_OVERLAYSHRINKYN },
- { TEXT("OVERLAYSTRETCHX"), DDFXCAPS_OVERLAYSTRETCHX },
- { TEXT("OVERLAYSTRETCHXN"), DDFXCAPS_OVERLAYSTRETCHXN },
- { TEXT("OVERLAYSTRETCHY"), DDFXCAPS_OVERLAYSTRETCHY },
- { TEXT("OVERLAYSTRETCHYN"), DDFXCAPS_OVERLAYSTRETCHYN },
- { TEXT("OVERLAYMIRRORLEFTRIGHT"), DDFXCAPS_OVERLAYMIRRORLEFTRIGHT },
- { TEXT("OVERLAYMIRRORUPDOWN"), DDFXCAPS_OVERLAYMIRRORUPDOWN },
-};
-
CAPSDEFSTYPE PalCapsDefs[MAX_BOXES] =
{
- {TEXT("1BIT"), DDPCAPS_1BIT},
- {TEXT("2BIT"), DDPCAPS_2BIT},
- {TEXT("4BIT"), DDPCAPS_4BIT},
- {TEXT("8BITENTRIES"), DDPCAPS_8BITENTRIES},
- {TEXT("8BIT"), DDPCAPS_8BIT},
- {TEXT("ALLOW256"), DDPCAPS_ALLOW256},
- {TEXT("INITIALIZE"), DDPCAPS_INITIALIZE},
+ {TEXT("ALPHA"), DDPCAPS_ALPHA},
{TEXT("PRIMARYSURFACE"), DDPCAPS_PRIMARYSURFACE},
- {TEXT("PRIMARYSURFACELEFT"), DDPCAPS_PRIMARYSURFACELEFT},
- {TEXT("VSYNC"), DDPCAPS_VSYNC}
-};
+ };

-CAPSDEFSTYPE SurfCapsDefs[MAX_BOXES] =
+CAPSDEFSTYPE BltCapsDefs[MAX_BOXES] =
{
- {TEXT("3DDEVICE"), DDSCAPS_3DDEVICE},
- {TEXT("ALPHA"), DDSCAPS_ALPHA},
- {TEXT("BACKBUFFER"), DDSCAPS_BACKBUFFER},
- {TEXT("COMPLEX"), DDSCAPS_COMPLEX},
- {TEXT("FLIP"), DDSCAPS_FLIP},
- {TEXT("FRONTBUFFER"), DDSCAPS_FRONTBUFFER},
- {TEXT("MIPMAP"), DDSCAPS_MIPMAP},
- {TEXT("OFFSCREENPLAIN"), DDSCAPS_OFFSCREENPLAIN},
- {TEXT("OVERLAY"), DDSCAPS_OVERLAY},
- {TEXT("PALETTE"), DDSCAPS_PALETTE},
- {TEXT("PRIMARYSURFACE"), DDSCAPS_PRIMARYSURFACE},
- {TEXT("PRIMARYSURFACELEFT"), DDSCAPS_PRIMARYSURFACELEFT},
- {TEXT("SYSTEMMEMORY"), DDSCAPS_SYSTEMMEMORY},
- {TEXT("TEXTURE"), DDSCAPS_TEXTURE},
- {TEXT("VIDEOMEMORY"), DDSCAPS_VIDEOMEMORY},
- {TEXT("VISIBLE"), DDSCAPS_VISIBLE},
- {TEXT("WRITEONLY"), DDSCAPS_WRITEONLY},
- {TEXT("ZBUFFER"), DDSCAPS_ZBUFFER}
-};
+ { TEXT("READSYSMEM"), DDBLTCAPS_READSYSMEM },
+ { TEXT("WRITESYSMEM"), DDBLTCAPS_WRITESYSMEM },
+ { TEXT("FOURCCTORGB"), DDBLTCAPS_FOURCCTORGB },
+ { TEXT("COPYFOURCC"), DDBLTCAPS_COPYFOURCC },
+ { TEXT("FILLFOURCC"), DDBLTCAPS_FILLFOURCC },
+ };

+CAPSDEFSTYPE AlphaCapsDefs[MAX_BOXES] =
+{
+ { TEXT("ALPHAPIXELS"), DDALPHACAPS_ALPHAPIXELS },
+ { TEXT("PREMULT"), DDALPHACAPS_PREMULT },
+ { TEXT("NONPREMULT"), DDALPHACAPS_NONPREMULT },
+ { TEXT("ALPHAFILL"), DDALPHACAPS_ALPHAFILL },
+ { TEXT("ALPHANEG"), DDALPHACAPS_ALPHANEG },
+ };

+CAPSDEFSTYPE OverlayCapsDefs[MAX_BOXES] =
+{
+ {TEXT("FLIP"), DDOVERLAYCAPS_FLIP},
+ {TEXT("FOURCC"), DDOVERLAYCAPS_FOURCC},
+ {TEXT("ZORDER"), DDOVERLAYCAPS_ZORDER},
+ {TEXT("MIRRORLEFTRIGHT"), DDOVERLAYCAPS_MIRRORLEFTRIGHT},
+ {TEXT("MIRRORUPDOWN"), DDOVERLAYCAPS_MIRRORUPDOWN},
+ {TEXT("CKEYSRC"), DDOVERLAYCAPS_CKEYSRC},
+ {TEXT("CKEYSRCCLRSPACE"), DDOVERLAYCAPS_CKEYSRCCLRSPACE},
+ {TEXT("CKEYSRCCLRSPACEYUV"), DDOVERLAYCAPS_CKEYSRCCLRSPACEYUV},
+ {TEXT("CKEYDEST"), DDOVERLAYCAPS_CKEYDEST},
+ {TEXT("CKEYDESTCLRSPACE"), DDOVERLAYCAPS_CKEYDESTCLRSPACE},
+ {TEXT("CKEYDESTCLRSPACEYUV"), DDOVERLAYCAPS_CKEYDESTCLRSPACEYUV},
+ {TEXT("CKEYBOTH"), DDOVERLAYCAPS_CKEYBOTH},
+ {TEXT("ALPHADEST"), DDOVERLAYCAPS_ALPHADEST},
+ {TEXT("ALPHASRC"), DDOVERLAYCAPS_ALPHASRC},
+ {TEXT("ALPHADESTNEG"), DDOVERLAYCAPS_ALPHADESTNEG},
+ {TEXT("ALPHASRCNEG"), DDOVERLAYCAPS_ALPHASRCNEG},
+ {TEXT("ALPHACONSTANT"), DDOVERLAYCAPS_ALPHACONSTANT},
+ {TEXT("ALPHAPREMULT"), DDOVERLAYCAPS_ALPHAPREMULT},
+ {TEXT("ALPHANONPREMULT"), DDOVERLAYCAPS_ALPHANONPREMULT},
+ {TEXT("ALPHAANDKEYDEST"), DDOVERLAYCAPS_ALPHAANDKEYDEST},
+ {TEXT("OVERLAYSUPPORT"), DDOVERLAYCAPS_OVERLAYSUPPORT},
+ };

+ CAPSDEFSTYPE MiscCapsDefs[MAX_BOXES] =
+{
+ {TEXT("READSCANLINE"), DDMISCCAPS_READSCANLINE},
+ {TEXT("READMONITORFREQ"), DDMISCCAPS_READMONITORFREQ},
+ {TEXT("READVBLANKSTATUS"), DDMISCCAPS_READVBLANKSTATUS},
+ {TEXT("FLIPINTERVAL"), DDMISCCAPS_FLIPINTERVAL},
+ {TEXT("FLIPODDEVEN"), DDMISCCAPS_FLIPODDEVEN},
+ {TEXT("FLIPVSYNCWITHVBI"), DDMISCCAPS_FLIPVSYNCWITHVBI},
+ {TEXT("COLORCONTROLOVERLAY"), DDMISCCAPS_COLORCONTROLOVERLAY},
+ {TEXT("COLORCONTROLPRIMARY"), DDMISCCAPS_COLORCONTROLPRIMARY},
+ {TEXT("GAMMACONTROLOVERLAY"), DDMISCCAPS_GAMMACONTROLOVERLAY},
+ {TEXT("GAMMACONTROLPRIMARY"), DDMISCCAPS_GAMMACONTROLPRIMARY}
+ };
+
+
//*------------------------------------------------------------------------
//| Dlg_OnCommand
//*------------------------------------------------------------------------
@@ -254,14 +206,16 @@
int i;
TCHAR szTitle[256];
static TCHAR *rgszCaps[] = {
- TEXT("Direct Draw Caps Bits"),
TEXT("Direct Draw Color Key Caps Bits"),
- TEXT("Direct Draw FX Caps Bits"),
TEXT("Direct Draw Palette Caps Bits"),
- TEXT("Direct Draw Surface Caps Bits")};
+ TEXT("Direct Draw Blt Caps Bits"),
+ TEXT("Direct Draw Alpha Caps Bits"),
+ TEXT("Direct Draw Overlay Caps Bits"),
+ TEXT("Direct Draw Misc Caps Bits")
+ };

- wsprintf(szTitle, TEXT("%s (%s)"), rgszCaps[Which%5],
- (Which < 5) ? TEXT("HAL") : TEXT("HEL"));
+ wsprintf(szTitle, TEXT("%s (%s)"), rgszCaps[Which%6],
+ (Which < 6) ? TEXT("HAL") : TEXT("HEL"));
SetWindowText(hwnd, szTitle);

ShowWindow(GetDlgItem(hwnd, IDC_RESTORE), SW_HIDE);
@@ -285,11 +239,8 @@
return TRUE;
}

-//*------------------------------------------------------------------------
-//| ddCapsDlg_Proc
-//*------------------------------------------------------------------------
BOOL CALLBACK
-ddCapsDlg_Proc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
+CKeyCapsDlg_Proc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
BOOL fProcessed = TRUE;

@@ -306,11 +257,8 @@
return (fProcessed);
}

-//*------------------------------------------------------------------------
-//| CKeyCapsDlg_Proc
-//*------------------------------------------------------------------------
BOOL CALLBACK
-CKeyCapsDlg_Proc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
+PalCapsDlg_Proc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
BOOL fProcessed = TRUE;

@@ -327,15 +275,12 @@
return (fProcessed);
}

-//*------------------------------------------------------------------------
-//| SurfCapsDlg_Proc
-//*------------------------------------------------------------------------
BOOL CALLBACK
-SurfCapsDlg_Proc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
+BltCapsDlg_Proc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
BOOL fProcessed = TRUE;

- Which = 4;
+ Which = 2;
switch (uMsg)
{
HANDLE_MSG(hDlg, WM_INITDIALOG, Dlg_OnInitDialog);
@@ -348,15 +293,12 @@
return (fProcessed);
}

-//*------------------------------------------------------------------------
-//| FXCapsDlg_Proc
-//*------------------------------------------------------------------------
BOOL CALLBACK
-FXCapsDlg_Proc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
+AlphaCapsDlg_Proc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
BOOL fProcessed = TRUE;

- Which = 2;
+ Which = 3;
switch (uMsg)
{
HANDLE_MSG(hDlg, WM_INITDIALOG, Dlg_OnInitDialog);
@@ -370,15 +312,12 @@
}


-//*------------------------------------------------------------------------
-//| PalCapsDlg_Proc
-//*------------------------------------------------------------------------
BOOL CALLBACK
-PalCapsDlg_Proc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
+OverlayCapsDlg_Proc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
BOOL fProcessed = TRUE;

- Which = 3;
+ Which = 4;
switch (uMsg)
{
HANDLE_MSG(hDlg, WM_INITDIALOG, Dlg_OnInitDialog);
@@ -391,12 +330,8 @@
return (fProcessed);
}

-
-//*------------------------------------------------------------------------
-//| HELddCapsDlg_Proc
-//*------------------------------------------------------------------------
BOOL CALLBACK
-HELddCapsDlg_Proc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
+MiscCapsDlg_Proc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
BOOL fProcessed = TRUE;

@@ -413,9 +348,7 @@
return (fProcessed);
}

-//*------------------------------------------------------------------------
-//| HELCKeyCapsDlg_Proc
-//*------------------------------------------------------------------------
+
BOOL CALLBACK
HELCKeyCapsDlg_Proc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
@@ -434,15 +367,12 @@
return (fProcessed);
}

-//*------------------------------------------------------------------------
-//| HELSurfCapsDlg_Proc
-//*------------------------------------------------------------------------
BOOL CALLBACK
-HELSurfCapsDlg_Proc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
+HELPalCapsDlg_Proc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
BOOL fProcessed = TRUE;

- Which = 9;
+ Which = 7;
switch (uMsg)
{
HANDLE_MSG(hDlg, WM_INITDIALOG, Dlg_OnInitDialog);
@@ -455,15 +385,12 @@
return (fProcessed);
}

-//*------------------------------------------------------------------------
-//| HELFXCapsDlg_Proc
-//*------------------------------------------------------------------------
BOOL CALLBACK
-HELFXCapsDlg_Proc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
+HELBltCapsDlg_Proc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
BOOL fProcessed = TRUE;

- Which = 7;
+ Which = 8;
switch (uMsg)
{
HANDLE_MSG(hDlg, WM_INITDIALOG, Dlg_OnInitDialog);
@@ -476,16 +403,31 @@
return (fProcessed);
}

+BOOL CALLBACK
+HELAlphaCapsDlg_Proc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
+{
+ BOOL fProcessed = TRUE;

-//*------------------------------------------------------------------------
-//| HELPalCapsDlg_Proc
-//*------------------------------------------------------------------------
+ Which = 9;
+ switch (uMsg)
+ {
+ HANDLE_MSG(hDlg, WM_INITDIALOG, Dlg_OnInitDialog);
+ HANDLE_MSG(hDlg, WM_COMMAND, Dlg_OnCommand);
+
+ default:
+ fProcessed = FALSE;
+ break;
+ }
+ return (fProcessed);
+}
+
+
BOOL CALLBACK
-HELPalCapsDlg_Proc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
+HELOverlayCapsDlg_Proc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
BOOL fProcessed = TRUE;

- Which = 8;
+ Which = 10;
switch (uMsg)
{
HANDLE_MSG(hDlg, WM_INITDIALOG, Dlg_OnInitDialog);
@@ -498,7 +440,24 @@
return (fProcessed);
}

+BOOL CALLBACK
+HELMiscCapsDlg_Proc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
+{
+ BOOL fProcessed = TRUE;

+ Which = 11;
+ switch (uMsg)
+ {
+ HANDLE_MSG(hDlg, WM_INITDIALOG, Dlg_OnInitDialog);
+ HANDLE_MSG(hDlg, WM_COMMAND, Dlg_OnCommand);
+
+ default:
+ fProcessed = FALSE;
+ break;
+ }
+ return (fProcessed);
+}
+
//*------------------------------------------------------------------------
//| DDEnumCallback
//*------------------------------------------------------------------------
@@ -539,7 +498,7 @@
//*------------------------------------------------------------------------
static int gCurMode = 0;

-DWORD DDAPI
+DWORD CALLBACK
EnumModesCallback(LPDDSURFACEDESC pddsd, LPVOID context)
{
Modes[ModeCnt].dwWidth = pddsd->dwWidth;
@@ -568,6 +527,8 @@
//| nCmdShow - Integer value specifying how to start app.,
//| (Iconic [7] or Normal [1,5])
//*------------------------------------------------------------------------
+typedef HRESULT (WINAPI * LPDIRECTDRAWENUMERATEEX)(LPDDENUMCALLBACKEX lpCallback, LPVOID lpContext, DWORD dwFlags);
+
int WINAPI
WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
@@ -586,22 +547,22 @@

// You need to do a GetModuleHandle and GetProcAddress in order to get the
// DirectDrawEnumerateEx
- hDDrawDLL = GetModuleHandle(TEXT("DDRAW"));
+ hDDrawDLL = LoadLibrary(TEXT("DDRAW.dll"));
if (!hDDrawDLL)
{
OutputDebugString(TEXT("LoadLibrary() failed - ddcaps: Can't list display modes"));
return (-1);
}
pDirectDrawEnumerateEx = (LPDIRECTDRAWENUMERATEEX )
- GetProcAddress(hDDrawDLL,TEXT("DirectDrawEnumerateExW"));
+ GetProcAddress(hDDrawDLL,TEXT("DirectDrawEnumerateEx"));

if (pDirectDrawEnumerateEx)
pDirectDrawEnumerateEx( DDEnumCallbackEx, (LPVOID) NULL,
DDENUM_ATTACHEDSECONDARYDEVICES |
- DDENUM_DETACHEDSECONDARYDEVICES |
- DDENUM_NONDISPLAYDEVICES);
+ DDENUM_DETACHEDSECONDARYDEVICES
+ );
else // Old DirectDraw, so do it the old way
- DirectDrawEnumerate(DDEnumCallback, NULL);
+ MessageBox(NULL,TEXT("EnumerateEx Call Fail"),TEXT("Error"),MB_OK);

ddrval = DirectDrawCreate(gpSelectedDriverGUID, &lpDD, NULL);
if (ddrval != DD_OK)
@@ -635,35 +596,41 @@

lpDD->lpVtbl->GetCaps(lpDD, &ddcapsHAL, &ddcapsHEL);

- gCaps[0].caps = &(ddcapsHAL.dwCaps);
- gCaps[0].defs = ddCapsDefs;
+ gCaps[0].caps = &(ddcapsHAL.dwCKeyCaps);
+ gCaps[0].defs = CKeyCapsDefs;

- gCaps[1].caps = &(ddcapsHAL.dwCKeyCaps);
- gCaps[1].defs = CKeyCapsDefs;
+ gCaps[1].caps = &(ddcapsHAL.dwPalCaps);
+ gCaps[1].defs = PalCapsDefs;

- gCaps[2].caps = &(ddcapsHAL.dwFXCaps);
- gCaps[2].defs = FXCapsDefs;
+ gCaps[2].caps = &(ddcapsHAL.dwBltCaps);
+ gCaps[2].defs = BltCapsDefs;

- gCaps[3].caps = &(ddcapsHAL.dwPalCaps);
- gCaps[3].defs = PalCapsDefs;
+ gCaps[3].caps = &(ddcapsHAL.dwAlphaCaps);
+ gCaps[3].defs = AlphaCapsDefs;

- gCaps[4].caps = &(ddcapsHAL.ddsCaps.dwCaps);
- gCaps[4].defs = SurfCapsDefs;
+ gCaps[4].caps = &(ddcapsHAL.dwOverlayCaps);
+ gCaps[4].defs = OverlayCapsDefs;

- gCaps[5].caps = &(ddcapsHEL.dwCaps);
- gCaps[5].defs = ddCapsDefs;
+ gCaps[5].caps = &(ddcapsHAL.dwMiscCaps);
+ gCaps[5].defs = MiscCapsDefs;

gCaps[6].caps = &(ddcapsHEL.dwCKeyCaps);
gCaps[6].defs = CKeyCapsDefs;

- gCaps[7].caps = &(ddcapsHEL.dwFXCaps);
- gCaps[7].defs = FXCapsDefs;
+ gCaps[7].caps = &(ddcapsHEL.dwPalCaps);
+ gCaps[7].defs = PalCapsDefs;

- gCaps[8].caps = &(ddcapsHEL.dwPalCaps);
- gCaps[8].defs = PalCapsDefs;
+ gCaps[8].caps = &(ddcapsHEL.dwBltCaps);
+ gCaps[8].defs = BltCapsDefs;

- gCaps[9].caps = &(ddcapsHEL.ddsCaps.dwCaps);
- gCaps[9].defs = SurfCapsDefs;
+ gCaps[9].caps = &(ddcapsHEL.dwAlphaCaps);
+ gCaps[9].defs = AlphaCapsDefs;
+
+ gCaps[10].caps = &(ddcapsHEL.dwOverlayCaps);
+ gCaps[10].defs = OverlayCapsDefs;
+
+ gCaps[11].caps = &(ddcapsHEL.dwMiscCaps);
+ gCaps[11].defs = MiscCapsDefs;
}


@@ -794,56 +761,63 @@
DialogBox(ghInstance, TEXT("About"), hWnd, (DLGPROC)AboutDlgProc);
break;

- case ID_VIEW_DRIVERCAPS:
- CreateDialog(ghInstance, MAKEINTRESOURCE(IDD_DIALOG1),
- NULL, ddCapsDlg_Proc);
- break;
-
+
case ID_VIEW_DRIVERCOLORKEYCAPS:
CreateDialog(ghInstance, MAKEINTRESOURCE(IDD_DIALOG1),
NULL, CKeyCapsDlg_Proc);
break;

- case ID_VIEW_DRIVERFXCAPS:
+ case ID_VIEW_DRIVERPALETTECAPS:
CreateDialog(ghInstance, MAKEINTRESOURCE(IDD_DIALOG1),
- NULL, FXCapsDlg_Proc);
+ NULL, PalCapsDlg_Proc);
break;

- case ID_VIEW_DRIVERPALETTECAPS:
+ case ID_VIEW_DRIVERBLTCAPS:
CreateDialog(ghInstance, MAKEINTRESOURCE(IDD_DIALOG1),
- NULL, PalCapsDlg_Proc);
+ NULL, BltCapsDlg_Proc);
break;

- case ID_VIEW_DRIVERSURFACECAPS:
+ case ID_VIEW_DRIVERALPHACAPS:
CreateDialog(ghInstance, MAKEINTRESOURCE(IDD_DIALOG1),
- NULL, SurfCapsDlg_Proc);
+ NULL, AlphaCapsDlg_Proc);
break;

- case ID_VIEW_HELCAPS:
+ case ID_VIEW_DRIVEROVERLAYCAPS:
CreateDialog(ghInstance, MAKEINTRESOURCE(IDD_DIALOG1),
- NULL, HELddCapsDlg_Proc);
+ NULL, OverlayCapsDlg_Proc);
break;
+
+ case ID_VIEW_DRIVERMISCCAPS:
+ CreateDialog(ghInstance, MAKEINTRESOURCE(IDD_DIALOG1),
+ NULL, OverlayCapsDlg_Proc);
+ break;

+//----------------
case ID_VIEW_HELCOLORKEYCAPS:
CreateDialog(ghInstance, MAKEINTRESOURCE(IDD_DIALOG1),
NULL, HELCKeyCapsDlg_Proc);
break;

- case ID_VIEW_HELFXCAPS:
- CreateDialog(ghInstance, MAKEINTRESOURCE(IDD_DIALOG1),
- NULL, HELFXCapsDlg_Proc);
- break;
-
case ID_VIEW_HELPALETTECAPS:
CreateDialog(ghInstance, MAKEINTRESOURCE(IDD_DIALOG1),
NULL, HELPalCapsDlg_Proc);
break;
-
- case ID_VIEW_HELSURFACECAPS:
+ case ID_VIEW_HELBLTCAPS:
CreateDialog(ghInstance, MAKEINTRESOURCE(IDD_DIALOG1),
- NULL, HELSurfCapsDlg_Proc);
+ NULL, HELBltCapsDlg_Proc);
break;
-
+ case ID_VIEW_HELALPHACAPS:
+ CreateDialog(ghInstance, MAKEINTRESOURCE(IDD_DIALOG1),
+ NULL, HELAlphaCapsDlg_Proc);
+ break;
+ case ID_VIEW_HELOVERLAYCAPS:
+ CreateDialog(ghInstance, MAKEINTRESOURCE(IDD_DIALOG1),
+ NULL, HELOverlayCapsDlg_Proc);
+ break;
+ case ID_VIEW_HELMISCCAPS:
+ CreateDialog(ghInstance, MAKEINTRESOURCE(IDD_DIALOG1),
+ NULL, HELMiscCapsDlg_Proc);
+ break;
case ID_PRINTF_LISTBOX:
if (HIWORD(wParam) == LBN_DBLCLK)
{
@@ -852,18 +826,18 @@
if (sel < (UINT)ModeCnt)
{
ddrval = lpDD->lpVtbl->SetCooperativeLevel(lpDD,
- hWnd,
- DDSCL_EXCLUSIVE |
- DDSCL_NOWINDOWCHANGES |
+ hWnd,
+ DDSCL_NORMAL |
DDSCL_FULLSCREEN);
if (ddrval == DD_OK)
{
ddrval = lpDD->lpVtbl->SetDisplayMode(lpDD,
- Modes[sel].dwWidth,
- Modes[sel].dwHeight,
- Modes[sel].dwBPP);
+ Modes[sel].dwWidth,
+ Modes[sel].dwHeight,
+ Modes[sel].dwBPP,0,0);
ddrval = lpDD->lpVtbl->SetCooperativeLevel(lpDD,
- hWnd, DDSCL_NORMAL);
+ hWnd,
+ DDSCL_NORMAL);
}
}
}
Index: ddcaps.rc
===================================================================
--- ddcaps.rc (revision 23142)
+++ ddcaps.rc (working copy)
@@ -66,19 +66,21 @@
END
POPUP "&Driver"
BEGIN
- MENUITEM "Driver &Caps", ID_VIEW_DRIVERCAPS
MENUITEM "Driver C&olor Key Caps", ID_VIEW_DRIVERCOLORKEYCAPS
- MENUITEM "Driver &FX Caps", ID_VIEW_DRIVERFXCAPS
MENUITEM "Driver &Palette Caps", ID_VIEW_DRIVERPALETTECAPS
- MENUITEM "Driver &Surface Caps", ID_VIEW_DRIVERSURFACECAPS
+ MENUITEM "Driver &Blt Caps", ID_VIEW_DRIVERBLTCAPS
+ MENUITEM "Driver &Alpha Caps", ID_VIEW_DRIVERALPHACAPS
+ MENUITEM "Driver &Overlay Caps", ID_VIEW_DRIVEROVERLAYCAPS
+ MENUITEM "Driver &Misc Caps", ID_VIEW_DRIVERMISCCAPS
END
POPUP "&HEL"
BEGIN
- MENUITEM "HEL &Caps", ID_VIEW_HELCAPS
MENUITEM "HEL C&olor Key Caps", ID_VIEW_HELCOLORKEYCAPS
- MENUITEM "HEL &FX Caps", ID_VIEW_HELFXCAPS
MENUITEM "HEL &Palette Caps", ID_VIEW_HELPALETTECAPS
- MENUITEM "HEL &Surface Caps", ID_VIEW_HELSURFACECAPS
+ MENUITEM "HEL &Blt Caps", ID_VIEW_HELBLTCAPS
+ MENUITEM "HEL &Alpha Caps", ID_VIEW_HELALPHACAPS
+ MENUITEM "HEL &Overlay Caps", ID_VIEW_HELOVERLAYCAPS
+ MENUITEM "HEL &Misc Caps", ID_VIEW_HELMISCCAPS
END
END

@@ -228,7 +230,7 @@
BEGIN
DEFPUSHBUTTON "&OK",IDOK,132,58,50,14
LTEXT "DirectDraw Caps Viewer for Windows CE",-1,15,14,165,8
- LTEXT "Copyright ?1995-2003 Microsoft Corporation",-1,15,28,
+ LTEXT "Copyright ?1995-2003 Microsoft Corporation",-1,15,28,
165,8
LTEXT "Version",-1,15,42,24,8
LTEXT "1.0",-1,40,42,66,8
Index: lbprintf.c
===================================================================
--- lbprintf.c (revision 23142)
+++ lbprintf.c (working copy)
@@ -49,102 +49,8 @@
//
// Error string table
//
-static ERRLIST elErrors[] =
-{
- { DD_OK ,TEXT("DD_OK") },
- { DDERR_ALREADYINITIALIZED ,TEXT("DDERR_ALREADYINITIALIZED")},
- { DDERR_CANNOTATTACHSURFACE ,TEXT("DDERR_CANNOTATTACHSURFACE")},
- { DDERR_CANNOTDETACHSURFACE ,TEXT("DDERR_CANNOTDETACHSURFACE")},
- { DDERR_CURRENTLYNOTAVAIL ,TEXT("DDERR_CURRENTLYNOTAVAIL")},
- { DDERR_EXCEPTION ,TEXT("DDERR_EXCEPTION")},
- { DDERR_GENERIC ,TEXT("DDERR_GENERIC")},
- { DDERR_HEIGHTALIGN ,TEXT("DDERR_HEIGHTALIGN")},
- { DDERR_INCOMPATIBLEPRIMARY ,TEXT("DDERR_INCOMPATIBLEPRIMARY")},
- { DDERR_INVALIDCAPS ,TEXT("DDERR_INVALIDCAPS")},
- { DDERR_INVALIDCLIPLIST ,TEXT("DDERR_INVALIDCLIPLIST")},
- { DDERR_INVALIDMODE ,TEXT("DDERR_INVALIDMODE")},
- { DDERR_INVALIDOBJECT ,TEXT("DDERR_INVALIDOBJECT")},
- { DDERR_INVALIDPARAMS ,TEXT("DDERR_INVALIDPARAMS")},
- { DDERR_INVALIDPIXELFORMAT ,TEXT("DDERR_INVALIDPIXELFORMAT")},
- { DDERR_INVALIDRECT ,TEXT("DDERR_INVALIDRECT")},
- { DDERR_LOCKEDSURFACES ,TEXT("DDERR_LOCKEDSURFACES")},
- { DDERR_NO3D ,TEXT("DDERR_NO3D")},
- { DDERR_NOALPHAHW ,TEXT("DDERR_NOALPHAHW")},
- { DDERR_NOCLIPLIST ,TEXT("DDERR_NOCLIPLIST")},
- { DDERR_NOCOLORCONVHW ,TEXT("DDERR_NOCOLORCONVHW")},
- { DDERR_NOCOOPERATIVELEVELSET ,TEXT("DDERR_NOCOOPERATIVELEVELSET")},
- { DDERR_NOCOLORKEY ,TEXT("DDERR_NOCOLORKEY")},
- { DDERR_NOCOLORKEYHW ,TEXT("DDERR_NOCOLORKEYHW")},
- { DDERR_NOEXCLUSIVEMODE ,TEXT("DDERR_NOEXCLUSIVEMODE")},
- { DDERR_NOFLIPHW ,TEXT("DDERR_NOFLIPHW")},
- { DDERR_NOGDI ,TEXT("DDERR_NOGDI")},
- { DDERR_NOMIRRORHW ,TEXT("DDERR_NOMIRRORHW")},
- { DDERR_NOTFOUND ,TEXT("DDERR_NOTFOUND")},
- { DDERR_NOOVERLAYHW ,TEXT("DDERR_NOOVERLAYHW")},
- { DDERR_NORASTEROPHW ,TEXT("DDERR_NORASTEROPHW")},
- { DDERR_NOROTATIONHW ,TEXT("DDERR_NOROTATIONHW")},
- { DDERR_NOSTRETCHHW ,TEXT("DDERR_NOSTRETCHHW")},
- { DDERR_NOT4BITCOLOR ,TEXT("DDERR_NOT4BITCOLOR")},
- { DDERR_NOT4BITCOLORINDEX ,TEXT("DDERR_NOT4BITCOLORINDEX")},
- { DDERR_NOT8BITCOLOR ,TEXT("DDERR_NOT8BITCOLOR")},
- { DDERR_NOTEXTUREHW ,TEXT("DDERR_NOTEXTUREHW")},
- { DDERR_NOVSYNCHW ,TEXT("DDERR_NOVSYNCHW")},
- { DDERR_NOZBUFFERHW ,TEXT("DDERR_NOZBUFFERHW")},
- { DDERR_NOZOVERLAYHW ,TEXT("DDERR_NOZOVERLAYHW")},
- { DDERR_OUTOFCAPS ,TEXT("DDERR_OUTOFCAPS")},
- { DDERR_OUTOFMEMORY ,TEXT("DDERR_OUTOFMEMORY")},
- { DDERR_OUTOFVIDEOMEMORY ,TEXT("DDERR_OUTOFVIDEOMEMORY")},
- { DDERR_OVERLAYCANTCLIP ,TEXT("DDERR_OVERLAYCANTCLIP")},
- { DDERR_OVERLAYCOLORKEYONLYONEACTIVE,TEXT("DDERR_OVERLAYCOLORKEYONLYONEACTIVE")},
- { DDERR_PALETTEBUSY ,TEXT("DDERR_PALETTEBUSY")},
- { DDERR_COLORKEYNOTSET ,TEXT("DDERR_COLORKEYNOTSET")},
- { DDERR_SURFACEALREADYATTACHED ,TEXT("DDERR_SURFACEALREADYATTACHED")},
- { DDERR_SURFACEALREADYDEPENDENT ,TEXT("DDERR_SURFACEALREADYDEPENDENT")},
- { DDERR_SURFACEBUSY ,TEXT("DDERR_SURFACEBUSY")},
- { DDERR_SURFACEISOBSCURED ,TEXT("DDERR_SURFACEISOBSCURED")},
- { DDERR_SURFACELOST ,TEXT("DDERR_SURFACELOST")},
- { DDERR_SURFACENOTATTACHED ,TEXT("DDERR_SURFACENOTATTACHED")},
- { DDERR_TOOBIGHEIGHT ,TEXT("DDERR_TOOBIGHEIGHT")},
- { DDERR_TOOBIGSIZE ,TEXT("DDERR_TOOBIGSIZE")},
- { DDERR_TOOBIGWIDTH ,TEXT("DDERR_TOOBIGWIDTH")},
- { DDERR_UNSUPPORTED ,TEXT("DDERR_UNSUPPORTED")},
- { DDERR_UNSUPPORTEDFORMAT ,TEXT("DDERR_UNSUPPORTEDFORMAT")},
- { DDERR_UNSUPPORTEDMASK ,TEXT("DDERR_UNSUPPORTEDMASK")},
- { DDERR_VERTICALBLANKINPROGRESS ,TEXT("DDERR_VERTICALBLANKINPROGRESS")},
- { DDERR_WASSTILLDRAWING ,TEXT("DDERR_WASSTILLDRAWING")},
- { DDERR_XALIGN ,TEXT("DDERR_XALIGN")},
- { DDERR_INVALIDDIRECTDRAWGUID ,TEXT("DDERR_INVALIDDIRECTDRAWGUID")},
- { DDERR_DIRECTDRAWALREADYCREATED ,TEXT("DDERR_DIRECTDRAWALREADYCREATED")},
- { DDERR_NODIRECTDRAWHW ,TEXT("DDERR_NODIRECTDRAWHW")},
- { DDERR_PRIMARYSURFACEALREADYEXISTS ,TEXT("DDERR_PRIMARYSURFACEALREADYEXISTS")},
- { DDERR_NOEMULATION ,TEXT("DDERR_NOEMULATION")},
- { DDERR_REGIONTOOSMALL ,TEXT("DDERR_REGIONTOOSMALL")},
- { DDERR_CLIPPERISUSINGHWND ,TEXT("DDERR_CLIPERISUSINGHWND")},
- { DDERR_NOCLIPPERATTACHED ,TEXT("DDERR_NOCLIPPERATTACHED")},
- { DDERR_NOHWND ,TEXT("DDERR_NOHWND")},
- { DDERR_HWNDSUBCLASSED ,TEXT("DDERR_HWNDSUBCLASSED")},
- { DDERR_HWNDALREADYSET ,TEXT("DDERR_HWNDALREADYSET")},
- { DDERR_NOPALETTEATTACHED ,TEXT("DDERR_NOPALETTEATTACHED")},
- { DDERR_NOPALETTEHW ,TEXT("DDERR_NOPALETTEHW")},
- { DDERR_BLTFASTCANTCLIP ,TEXT("DDERR_BLTFASTCANTCLIP")},
- { DDERR_NOBLTHW ,TEXT("DDERR_NOBLTHW")},
- { DDERR_NODDROPSHW ,TEXT("DDERR_NODDROPSHW")},
- { DDERR_OVERLAYNOTVISIBLE ,TEXT("DDERR_OVERLAYNOTVISIBLE")},
- { DDERR_NOOVERLAYDEST ,TEXT("DDERR_NOOVERLAYDEST")},
- { DDERR_INVALIDPOSITION ,TEXT("DDERR_INVALIDPOSITION")},
- { DDERR_NOTAOVERLAYSURFACE ,TEXT("DDERR_NOTAOVERLAYSURFACE")},
- { DDERR_EXCLUSIVEMODEALREADYSET ,TEXT("DDERR_EXCLUSIVEMODEALREADYSET")},
- { DDERR_NOTFLIPPABLE ,TEXT("DDERR_NOTFLIPPABLE")},
- { DDERR_CANTDUPLICATE ,TEXT("DDERR_CANTDUPLICATE")},
- { DDERR_NOTLOCKED ,TEXT("DDERR_NOTLOCKED")},
- { DDERR_CANTCREATEDC ,TEXT("DDERR_CANTCREATEDC")},
- { DDERR_NODC ,TEXT("DDERR_NODC")},
- { DDERR_WRONGMODE ,TEXT("DDERR_WRONGMODE")},
- { DDERR_IMPLICITLYCREATED ,TEXT("DDERR_IMPLICITLYCREATED")},
-};


-
HWND LBCreate( HWND hWnd, HINSTANCE hInst, DWORD pos, BOOL debug )
{
hWndListBox = CreateWindow(
@@ -198,28 +104,3 @@
}


-static LPTSTR getErrorString( HRESULT ddrval )
-{
- int i;
-
- for( i=0;i<sizeof( elErrors )/sizeof( elErrors[0] );i++ )
- {
- if( ddrval == elErrors[i].rval )
- {
- return elErrors[i].str;
- }
- }
-
- return TEXT("Unknown Error Code");
-}
-
-
-void __cdecl LBPrintfRC( HRESULT ddrval, LPTSTR fmt, ... )
-{
- TCHAR buff[512];
-
- wvsprintf( buff, fmt, (LPVOID)(&fmt+1) );
-
- LBPrintf( TEXT("%s, rc=%ld (0x%08lx:%s)"), buff, LOWORD( ddrval ),
- ddrval, getErrorString( ddrval ) );
-}
Index: resource.h
===================================================================
--- resource.h (revision 23142)
+++ resource.h (working copy)
@@ -70,16 +70,19 @@
#define IDC_COMBO_DRIVERS 1035
#define ID_FILE_RESTORE 40001
#define ID_FILE_EXIT 40002
-#define ID_VIEW_DRIVERCAPS 40003
-#define ID_VIEW_DRIVERCOLORKEYCAPS 40004
-#define ID_VIEW_DRIVERFXCAPS 40005
-#define ID_VIEW_DRIVERPALETTECAPS 40006
-#define ID_VIEW_DRIVERSURFACECAPS 40007
-#define ID_VIEW_HELCAPS 40008
+#define ID_VIEW_DRIVERCOLORKEYCAPS 40003
+#define ID_VIEW_DRIVERPALETTECAPS 40004
+#define ID_VIEW_DRIVERBLTCAPS 40005
+#define ID_VIEW_DRIVERALPHACAPS 40006
+#define ID_VIEW_DRIVEROVERLAYCAPS 40007
+#define ID_VIEW_DRIVERMISCCAPS 40008
#define ID_VIEW_HELCOLORKEYCAPS 40009
-#define ID_VIEW_HELFXCAPS 40010
-#define ID_VIEW_HELPALETTECAPS 40011
-#define ID_VIEW_HELSURFACECAPS 40012
+#define ID_VIEW_HELPALETTECAPS 40010
+#define ID_VIEW_HELBLTCAPS 40011
+#define ID_VIEW_HELALPHACAPS 40012
+#define ID_VIEW_HELOVERLAYCAPS 40013
+#define ID_VIEW_HELMISCCAPS 40014
+
#define IDC_STATIC -1

// Next default values for new objects


source 所在位置是 C:\WINCE600\PUBLIC\DIRECTX\SDK\SAMPLES\DXMISC\DDCAPS

build ddcaps 的 command 是:
sysgen -p directx ddcaps
因為 ddcaps 是在 public 下的 directx 目錄,所以 -p 後面要寫 directx ,意思是(path = directx)。
project name 就是 ddcaps.

DirectDraw Capability in CE 6.0

要知道系統哪些 DirectDraw Function 是 hardware support,哪些是用 software emulate,
可以用 IDirectDraw::GetCaps 來取得 ddraw capability 列表:
HRESULT GetCaps(
LPDDCAPS lpDDDriverCaps,
LPDDCAPS lpDDEmulCaps
);

傳進去的兩個 argument 都是用來取出 capability 的 structure pointer,結構完全一樣,一個是 hardware support list,一個是 software emulation list
  • lpDDDriverCaps : hardware
  • lpDDEmulCaps : software
Support List structure 的definition 是 DDCAPS

typedef struct _DDCAPS {
DWORD dwSize;
DWORD dwCKeyCaps;
DWORD dwPalCaps;
DWORD dwBltCaps;
DWORD dwAlphaCaps;
DWORD dwOverlayCaps;
DWORD dwVidMemTotal;
DWORD dwVidMemFree;
DWORD dwVidMemStride;
DWORD dwMaxVisibleOverlays;
DWORD dwCurrVisibleOverlays;
DWORD dwNumFourCCCodes;
DWORD dwAlignBoundarySrc;
DWORD dwAlignSizeSrc;
DWORD dwAlignBoundaryDest;
DWORD dwAlignSizeDest;
DWORD dwRops[DD_ROP_SPACE];
DWORD dwMinOverlayStretch;
DWORD dwMaxOverlayStretch;
DWORD dwMiscCaps;
} DDCAPS,FAR *LPDDCAPS;

每個 DWORD的每個 bit 都代表一個 function,宣告在 ddraw.h (C:\WINCE600\PUBLIC\COMMON\SDK\INC\ddraw.h)

platform builder public folder 附有一個 DDCAPS 的 sample program,可以列出 platform ddraw hardware/software support .
很悲慘的是,ddcaps structure 在 CE 6.0 大幅修改,所以DDCAPS sample code 在 6.0 不能 build 了!!
看這一篇: DirectDraw Migration.




我做了修改: Modify DDCAPS for CE 6.0

8.11.2010

CListBox : ListBox control in WTL

WTL 也包裝了一些 common control,例如 ListBox,名稱叫 CListBox, 在 atlctrls.h.

像 前面的 example : http://realchecko.blogspot.com/2010/05/win32-listbox-control.html
改用 WTL 來寫,就是:
#pragma once
#define WINVER 0x0600

#include <atlbase.h>
#include <atlapp.h>
#include <atlwin.h>
#include <atlctrls.h>

#include "resource.h"

class CMainDialog : public CDialogImpl<CMainDialog>
{
public:
enum {IDD = IDD_DIALOG1 };
int addi;
CListBox list;


BEGIN_MSG_MAP(CMainDialog)
MESSAGE_HANDLER(WM_INITDIALOG,OnInitDialog)
COMMAND_ID_HANDLER(IDCANCEL, OnCancel)
COMMAND_ID_HANDLER(IDC_BTNADD,OnBtnAdd)
END_MSG_MAP()

LRESULT OnInitDialog(UINT,WPARAM,LPARAM,BOOL&)
{
addi=0;
RETAILMSG(1,(TEXT("OnInitDialog\r\n")));
list.Attach(GetDlgItem(IDC_LIST1));
return TRUE;
}


LRESULT OnCancel(WORD,WORD wID,HWND,BOOL&)
{
::PostQuitMessage(wID);
return 0;
}

LRESULT OnBtnAdd(WORD,WORD wID,HWND,BOOL& hHandled)
{
TCHAR outmsg[10];
swprintf(outmsg,_T("%d"),addi++);
list.AddString(outmsg);
int cnt = list.GetCount();
if(cnt>30)
list.DeleteString(0);
cnt = list.GetCount();
if(cnt>=14)
list.SetTopIndex(cnt-14);
RETAILMSG(1,(TEXT("Button Add\r\n")));
return TRUE;
}

};

CAppModule _Module;

int WINAPI _tWinMain(HINSTANCE hInstance,HINSTANCE,LPTSTR lpstrCmdLine,int nCmdShow)
{
HRESULT hRes = ::CoInitializeEx(NULL,COINIT_MULTITHREADED);
::DefWindowProc(NULL,0,0,0L);
AtlInitCommonControls(NULL);
hRes = _Module.Init(NULL,hInstance);

CMainDialog dlgMain;
hRes = dlgMain.DoModal();
::CoUninitialize();

return hRes;
}

可以看到,大概是用 Attach( GetDlgItem(IDC_LIST1)) 把 WTL class: CListBox 和 ListBox control 建立關係。

相關的說明: http://www.cchsu.com/arthur/prg_bg5/wtl3.htm

8.10.2010

Build Assembly code in VS2005

這是參考 tcpmp 的 project 檔。

大概也跟 eVC 一樣,就是為 assembly.asm 加上 custom build command.
  1. 先把 assembly code 的 source file 寫好
  2. 開啟 VS2005,把 assembly file 加到 source folder 中
  3. 在 assembly file 按右鍵,選 properties
  4. Custom Build Step -- General --Command Line,, 寫armasm.exe -cpu xscale "$(InputPath)" "$(IntDir)/$(InputName).obj"
  5. Output 寫$(IntDir)/$(InputName).obj

8.09.2010

CpuId - 紀錄一下

因為 CE 6.0 沒有辦法 SetKMode,所以只好... 寫一個 driver,然後 load 進去..,

這就是 copy 自 tcpmp getcpuid 的 code 後,run 起來:
  • 我們的: 4117B362,1D152152,0,0
  • 測試的: 410FB764,1D992992,0,0
第一個,cpu id

4117B362:ref(http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0360f/CACEDHJG.html)
所以是 ARM1136, rev2

410FB764: ref (http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0360f/CACEDHJG.html)
所以是 ARM1176 , rev 4

第二個,cache type register

ref : http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0211k/I67616.html

  • [31:29] : always 0
  • [28:25] : ctype - cache type b1110 means "write back","register 7 operation","format C"
  • [24] : separate D and I cache
  • [23:12] : D cache size
  • [11:0] : I cache size
其中 D 和 I cache size encoding format:
  • [11] : P
  • [10:9] : always 0
  • [8:6] : size
  • [5:3] : association (way)
  • [2] : M
  • [1:0] Length
所以
1D152152 : 16K, 4 way, len=32 bytes.
1D992992: 32K, 4 way, len=32 bytes.


driver code

GETID.C:
#include <windows.h>
#include <drvlib.h>


//----- Code Control -----
#define GID_DEBUG

#ifdef DEBUG
DBGPARAM dpCurSettings = { TEXT("Getid"), {
TEXT("Verbose"), TEXT(""), TEXT(""), TEXT(""),
TEXT(""), TEXT(""), TEXT(""), TEXT(""),
TEXT(""), TEXT(""), TEXT(""), TEXT(""),
TEXT(""), TEXT(""), TEXT(""), TEXT("")},
0x00000000
};
#endif

extern void GetCpuId(int,DWORD*);

void SafeGetCpuId(int Id, DWORD* p)
{
memset(p,0,4*sizeof(DWORD));
GetCpuId(Id,p);
}


//--- GID_Init
DWORD GID_Init(DWORD dwContext)
{
DWORD CpuId[4];
DWORD dwErr;
TCHAR outmsg[60];

RETAILMSG(1, (TEXT("[GID] GID_Init+\r\n")));

SafeGetCpuId(0,CpuId);
RETAILMSG(1,(TEXT("%X,%X,%X,%X\r\n"),CpuId[0],CpuId[1],CpuId[2],CpuId[3]));
swprintf(outmsg,TEXT("%X,%X,%X,%X"),CpuId[0],CpuId[1],CpuId[2],CpuId[3]);

MessageBox(NULL,outmsg,TEXT("GID"),MB_OK);


RETAILMSG(1, (TEXT("[GID] GID_Init OK \r\n")));
return TRUE;

}



//--- GID_Deinit
BOOL GID_Deinit(DWORD dwContext)
{
RETAILMSG(1, (TEXT("[GID] GID_Deinit+\r\n")));


return TRUE;
}



//--- GID_Open
DWORD GID_Open(DWORD dwData, DWORD dwAccess, DWORD dwShareMode)
{
RETAILMSG(1, (TEXT("[GID] GID_Open+\r\n")));

return dwData;
}



//--- GID_Close
BOOL GID_Close(DWORD Handle)
{
RETAILMSG(1, (TEXT("[GID] GID_Close+\r\n")));

return TRUE;
}



//--- GID_Read
DWORD GID_Read(DWORD Handle, LPVOID pBuffer, DWORD dwNumBytes)
{
RETAILMSG(1, (TEXT("[GID] GID_Read+\r\n")));
return 0;
}



//--- GID_Write
DWORD GID_Write(DWORD Handle, LPCVOID pBuffer, DWORD dwNumBytes)
{
RETAILMSG(1, (TEXT("[GID] GID_Write+\r\n")));


return 0;
}



//--- GID_Seek
DWORD GID_Seek(DWORD Handle, long lDistance, DWORD dwMoveMethod)
{
RETAILMSG(1, (TEXT("[GID] GID_Seek+\r\n")));

return (DWORD) -1;
}



//--- GID_IOControl
BOOL GID_IOControl(
DWORD Handle,
DWORD dwCode,
PBYTE pBufIn,
DWORD dwLenIn,
PBYTE pBufOut,
DWORD dwLenOut,
PDWORD pdwActualOut
)
{

RETAILMSG(1, (TEXT("[GID] GID_IOControl+\r\n")));
return (FALSE);
}

BOOL
GID_DllEntry(
HINSTANCE hinstDll, /*@parm Instance pointer. */
DWORD dwReason, /*@parm Reason routine is called. */
LPVOID lpReserved /*@parm system parameter. */
)
{
if (dwReason == DLL_PROCESS_ATTACH)
{
DisableThreadLibraryCalls((HMODULE) hinstDll);
}


return (TRUE);
}


arm.s
INCLUDE kxarm.h

EXPORT GetCpuId

TEXTAREA

LEAF_ENTRY GetCpuId
export GetCpuId
mrs r0,cpsr

and r0,r0,#15
cmp r0,#15
bne UserMode
mrc p15,0,r0,c0,c0,0
nop
nop
mrc p15,0,r2,c0,c0,1
nop
nop
str r0,[r1,#0]
str r2,[r1,#4]
UserMode
mov pc,lr

ref (http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0360f/CACEDHJG.html) CpuID 取的是 opcode2 = 0 和 1 : cpu id 跟 cache type.
GETID.DEF
LIBRARY getid

EXPORTS
GID_Init
GID_Deinit
GID_Open
GID_Close
GID_Read
GID_Write
GID_IOControl

sources

TARGETNAME=getid
TARGETTYPE=DYNLINK
RELEASETYPE=PLATFORM

DLLENTRY=GID_DllEntry
DEFFILE=$(_TARGETPLATROOT)\SRC\DRIVERS\getid\getid.def

PREPROCESSDEFFILE=1
SYNCHRONIZE_DRAIN=1
WINCEREL=1

TARGETLIBS= \
$(_COMMONSDKROOT)\LIB\$(_CPUINDPATH)\coredll.lib \

SOURCELIBS= \

SOURCES= \
getid.c \
arm.s


load driver 的程式就是以前哪個 activedriverex( ). 改一下 dll name 就可以


ref http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0211k/I67616.html

c0, Core feature ID registers

好像可以得到更多 cpu feature

8.04.2010

OEM 自訂 cache mode --- CE 6.0

這一篇 ( http://support.microsoft.com/kb/977855/ ) 超新的... An update that enables the Windows Embedded CE 6.0 kernel to support different cache mode bits is available

是 Microsoft as Windows Embedded CE 6.0 Platform Builder Monthly Update (June 2010). 才支援。

就是在 5.0 以前都有 support 的 OEMARMCacheMode( ) 回報 .

7.30.2010

CE 6 error : invalid parameters passwd to wince.bat

invalide parameters passed to wince.bat
最近要 show catalog item view 時,出現這個 error dialog,然後 vs2005 就 fail 了。


查到後來是 BSP 設定會自動 SET, UNSET 一些 SYSGEN_XX,所以不知道哪一個 SYSGEN_XX 被修改所導致。

Google 一下,唯一的一個解答,好像是說環境變數造成的....
結果我用 clean system,reinstall CE6 還是一樣會發生.

還沒有查到是哪一個 sysgen parameter..

7.19.2010

VFP in CE 6.0

有關 CE 6 的 ARM VFP 支援

這一篇 google groupe討論
The VS2005 compiler used by PB for CE6.0 emits no VFP instructions and
unless you implement FPCRT.DLL for an ARM then all CE implementations
are integer (default MS implementation of FPCRT uses software
emulation), even if you have a hardware VFP in your core (e.g. ARM11
or Cortex-A8). To actually use the VFP you must do the following:

1. Use SYSGEN_OEM_FPCRT - catalog item "OEM Floating Point CRT (ARM
only)
2. Download the VFPv2 library support from the ARM website and
incorporate it into your build:
www.arm.com/products/os/windowsce_vfp_dl.html

Instructions are included with the download from ARM.

My tests show a 4x increase in performance on floating point
operations on a release build on an ARM1136JF-S core.

Andrew.

也就是說,CE 6 的 VFP driver(?) library f是由 ARM 提供的。

還有這一篇 MSDN 討論,說
The current version of Windows CE supports the ARMV4I architecture. Cortex A8 it's ARMv7 (ARM's naming can be even more confusing than ms one...) and currently the compiler does not use its specific features (NEON, VFP3 etc.).

The new release of Windows CE (named Windows Embedded Compact 7) will support the ARMv7 architecture.

Here you can find some information about the new features of this release:

http://www.microsoft.com/windowsembedded/en-us/products/windowsce/compact7.mspx

You can download a public beta from connect.microsoft.com.

If your project has not a very short time frame (you plan to release your device Q2 next year, for example), you may consider using this new release for your development to be able to "unleash" all the power of your CPU core.


Valter Minute
Windows Embedded MVP
http://geekswithblogs.net/WindowsEmbeddedCookbook

所以你藥用 CE 6 寫 VFP 或是 NEON 的 code 是不可能的,要等 Windows Embedded 7.

總合起來,可以要看一下 msdn :
Including a Replacement Floating Point C Run-Time Library in a Run-Time Image
還有這一篇的實做 copy 下來,免得不見:

Download and install the "ARM® VFPv2 Floating Point Support Library" from ARM.


If building with Platform Builder to build your OS image

simply add the FPCRT project to your solution, and set the following catalog feature

EVM_3530\Core OS\CEBASE\Applications and Services Development\C Libraries and Runtimes\OEM Floating Point CRT (ARM only)

A SYSGEN is required.


If building without Platform Builder, ensure the SYSGEN variable is set. I added the following to my "tinykernel DEBUG.bat" file.

set SYSGEN_OEM_FPCRT=1

Add entries to platform.bib

fpcrt.dll            $(_FLATRELEASEDIR)\fpcrt.dll               NK  SH
k.fpcrt.dll $(_FLATRELEASEDIR)\fpcrt.dll NK SHMK

I copied the contents of %WINCEROOT%\OTHERS\ARM\VFPv2\src\ARMVFPv2\obj to my prebuilt directory.
Then copied the DLL project to my %WINCEROOT%\OTHERS\ARM\VFPv2\src\FPCRT to my %PLATFORMROOT%\%_TGTPLAT%\src\drivers directory.
Modified dirs, and updated sources to point to new library location.

A SYSGEN is required.

Visual Studio 2008 VFP Support

VS2008 ARM compiler supports emulated and hardware floating point. To enable hardware based Vector Floating point you need to use this option

/QRfpe-

This means not floating point emulation.

If you use

/QRfpe

it will generate software floating point, as it means floating point emulation.

Microsoft KB 947894


Note: This is not related to NEON support



有關 multimedia (video/audio/graphic) 部份,ARM 有提供 OpenMax 的實做 (實際用 ARM11, Cortex A8 feature optimize) 的 library
Khronos Standards
...但是依照慣例,ARM的網頁連結 半年後一定又會改 >_<

要註冊才能download..
喔?是以 library 的方式提供,用 realview compile (當然不是 VS...)

7.08.2010

Speed up Windows CE boot time

以第一個 application 畫面顯示出來為準...

首先是,,改用 XIP。
XIP 的話,NK 被切成 tiny 和 BINFS 兩部份, bootloader 只要load binfs 就可以開始啟動 os 了,不用把整個 OS bin 都 load 進來 才動作,所以可以比較快。

用 msdn 的 delay load driver - busenum2
一些不急的 driver 等 gwes , ap load 完後再load。這樣 就可以比較快進入 ap.

bootloader
直接 load os,不要 作 2 step loading -- load eboot, eboot load os。這樣可以比較快。



但是怎麼作,好像都要 8 sec 以上,要做出 5 sec 開機好像不可能喔...

bootloader load tinybin, binfs 啟動就花 3 sec
load gwes, gmtt_o 又花 1.6 sec 以上

再加一些其他啦里啦鉔的....

7.05.2010

再作 celog.dll - boot time

因為要作 msdn 那個 delay load driver 的測試,所以把 celog 也 enable 起來:

在 os project 勾選
  • enable event tracking during boot
  • flush tracked event to release directory
然後 修改 makexip.js,把 celog.dll 放到 boot region。


參考 http://msdn.microsoft.com/en-us/library/aa450700.aspx
設定

[HKEY_LOCAL_MACHINE\System\CeLog]
"Transport"="LocalFile"
"FileName"="\\celog.clg"
"ZoneCE"=dword:00014040
"FlushTimeout"=dword:1F4

log 到 ram, 每 500ms flush 到 ram file一次 (避免 data loss)
log 的東西:
  • CELZONE_BOOT_TIME 0x00010000 -- 包含 boot event
  • CELZONE_LOADER 0x00004000 -- 包含 load module (dll) 的 event
  • CELZONE_PROCESS 0x00000040 -- 包含 create process (exe) 的 event
重 build 開機後,就可以看到 celog.clg 在 // 下, copy 到 SD。
開啟 build environment:
 readlog celog.clg output.txt
把 clg 轉為文字。

就可以看到 load module 和 create process event 的時間了。

clone public code

大概就是用 sysgen_capture 這個 tool 來作:

首先找到 sysgen 的 targetname。假設是 celogflush 好了
* 在 platform/yourbspname 下 create 一個 folder : celogflush
* 在 celogflush 下: sysgen_capture -p common celogflush
* copy public/common/sdk/samples/celog/flush/celogflush/flush.c 過來
* 因為 celogflush/sources 有列 include path : ..,所以把 ../*.h 也 copy 過來
* rename 剛剛 sysgen_capture 產生的 sources.celogflush 為 sources
* 修改 sources,把 source = 加上 flush.c
* copy Makefile 過來
這樣就可以下 build,產生 celogflush.exe 了

主要大概是用 sysgen_caputre 產生 target 的 source 檔,這樣才知道 target 用的 library 有哪些。

把 source file copy 過來,修改 sources。
雖然 library 中會有同樣的 sample,但是大蓋會以 source = 列出的優先(吧?)

6.29.2010

The master makefile of Windows CE

真是太感謝 Kun-Yi 啦!

從我進來這裡,RBT 就展示他sysgen XXX 的能力,讓我門少build 一些 code,少浪費一些時間。
但是我問他,怎麼知道 改 OOO 時要用 XXX ?
他也說不出個所以然來
不然就是他不願意說...
所以我就不斷的在找這個謎.....(找了好幾年..)

後來,上一篇,偉大而又無私的 資深 Windows CE 專家 Kun-Ki 直接給出答案:
就是 PUBLIC\COMMON\CESYSGEN\makefile

打開來看,果然有所有 target 的 name 和 dependency..

真是令人感動!!

終於看到 CE 的 master makefile ....

6.28.2010

output message on device on/off - sysgen and private

在查 system poweron/off 時,有時要列印出所以 driver 的 on/off message。
一個一個加很麻煩,可以直接在 device manger 加:
C:\WinCE600\PRIVATE\WINCEOS\COREOS\DEVICE\DEVCORE\Devapi.c
裡面的 DevMgrPowerOffHandler:
原來的
                DEBUGMSG(ZONE_PNP,(TEXT("Calling \'%s\' PowerDown at 0x%x\r\n"),
改為強制輸出的 RETAILMSG 就可以。


在該 folder build 完後,下 sysgen -p common devmgr 後,就可以makeimg 了。



-p common 的意思是 "在 wince600\public\common 下"
-p option 好像是指 public 下的 folder。
所以 sysgen -p common devmgr 的意思是要 sysgen public\common\ 下的 devmgr
-- 雖然不知道怎麼看出common folder 里有 devmgr 這個 target @_@..

可以測試一下:
sysgen -p directx 會 build 出 public\direct 下所有的 directx example
如果只要 build mosquito:
sysgen -p directx mosquito



sysgen 也是一個 batch 檔...

只是我一直找不到那些 sysgen 的 "target" 到底在哪裡...

關於 sysgen 的target ..大概可以到 retail folder 去找,, dll 或是 exe。
用 cesysgen_capture,會產生 該 project 的 sources file,然後去找該 target 是由哪些
library build 出來的。
cesysgen_capture -p common devmgr 
會產生一個 sources.devmgr

sysgen_capture device

會產生一堆 (相依?) 的 source 檔:
  • sources.ceddk -- ceddk.lib
  • sources.devmgr -- devmgr.lib
  • sources.pm -- pm.lib
  • sources.udevice -- udevice.exe
  • sources.device -- device.exe

6.23.2010

GDI - SelectObject

DC (Device Context) 是畫布
一堆 GDI 物件:Pen, Brush, Font, Bitmap, ..都是可以畫在畫布(DC)上的物件。


所以要用這些 GDI 畫圖時,要用 SelectObject(DC_A,Object_A) ,告訴kernel 我要 DC_A上用Object_A 畫圖了。

SelectObject( ) 會傳回那個 DC 原來的 Object 內容,讓你畫完後,可以 Select 回來原來物件。
例如原來是 12 點字,後來用 14 點字寫幾個字後,選回原來的 12點字


... 希望這個想法可以用....

6.17.2010

show progress bar when booting - CE

這一篇 說道如何作 開機動畫。

他的作法是在 CE driver 中作,他選 backlight driver。
-- 應該要把 backlight driver 放在前面一點。

在 backlight driver 啟動(Init or PowerOn ?)的時候 create 一個 thread,定時的 update lcd buffer。一直到 Stopflash 的 event 送達。

Stop event 可以由 shell 送出。代表開機完成了。


問題: Driver PowerUp/Down 時好像是 single thread,可以create thread 嗎?

6.15.2010

Bookmark - Monte Carlo Profiler for CE 6.0 (MSDN)

http://msdn.microsoft.com/en-US/library/ee481579.aspx 這一篇 MSDN 有講 CE 6.0 Monte Carlo Profiler 的作法,可以試試看。

用 target control 下 prof 可以看到help

6.14.2010

WTL - request to send WM_PAINT message

WM_PAIN message 被送出的機會有:
  • OS 發現你的視窗區域需要重劃了,例如:被其他windows 蓋過,size 改變..
  • 你自己呼叫 function,叫 OS 送 message 給你
WTL 里要呼叫 Invalidate( ),實際上是 ATL implement 的,不是 WTL。
在 altwin.h 。
實際上他也是呼叫 InvalidateRect( ) 而已。


順便寫一下 CPaintDC

原本在 Win32SDK 中,要對 DC 作動作,都要 beginpaint, get xx 等一堆,然後畫完又要 endpaint.. etc.

CPaintDC 就把剛剛的動作包裝起來,在 constructor 中作 BeginPain,在Destrctor 作 EndPaint。

又 CPaintDC 繼承自 CDCT。

CDCT 是 WTL 把所有 Win32 的 DC 繪圖包裝起來的 class。
所以一旦生成 CPaintDC 後,就可以任意使用 DC繪圖 function 了。

6.10.2010

Simple Dialog Program with WTL

一個簡單的 Dialog 程式:
main.cpp:
#pragma once
#define WINVER 0x0420

#include <atlbase.h>
#include <atlapp.h>
#include <atlwin.h>

#include "resource.h"

class CMainDialog : public CDialogImpl<CMainDialog>
{
public:
enum { IDD = IDD_MAINDLG };

BEGIN_MSG_MAP(CMainDialog)
COMMAND_ID_HANDLER(IDCANCEL, OnCancel)
END_MSG_MAP()

LRESULT OnCancel(WORD,WORD wID,HWND,BOOL&)
{
::PostQuitMessage(wID);
return 0;
}
};

CAppModule _Module;

int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE,LPTSTR lpstrCmdLine, int nCmdShow)
{
HRESULT hRes = ::CoInitialize(NULL);

::DefWindowProc(NULL,0,0,0L);

AtlInitCommonControls(NULL);

hRes = _Module.Init(NULL,hInstance);

CMainDialog dlgMain;
hRes = dlgMain.DoModal();

_Module.Term();
::CoUninitialize();

return hRes;
}

resource.h
#define IDD_MAINDLG 101

// Next default values for new objects
//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 102
#define _APS_NEXT_COMMAND_VALUE 40001
#define _APS_NEXT_CONTROL_VALUE 1001
#define _APS_NEXT_SYMED_VALUE 101
#endif
#endif

resource.rc 就是一個 dialog,沒有 button。


奇怪,現在我自己照著作,反而要改這樣:
.c
#pragma once
#define WINVER 0x0600

#include <atlbase.h>
#include <atlapp.h>
#include <atlwin.h>

#include "resource.h"

class CMainDialog : public CDialogImpl<CMainDialog>
{
public:
enum { IDD = IDD_DIALOG1 };

BEGIN_MSG_MAP(CMainDialog)
COMMAND_ID_HANDLER(IDCANCEL, OnCancel)
END_MSG_MAP()

LRESULT OnCancel(WORD,WORD wID,HWND, BOOL&)
{
::PostQuitMessage(wID);
return 0;
}
};

CAppModule _Module;

int WINAPI _tWinMain(HINSTANCE hInstance,HINSTANCE,LPTSTR lpstrCmdLine,int nCmdShow)
{
HRESULT hRes = ::CoInitializeEx(NULL,COINIT_MULTITHREADED);
::DefWindowProc(NULL,0,0,0L);
AtlInitCommonControls(NULL);
hRes = _Module.Init(NULL,hInstance);

CMainDialog dlgMain;
hRes = dlgMain.DoModal();
::CoUninitialize();

return hRes;
}


.h 大概就跟上面一樣。