在VC6的 IDE 中利用 Visual Assistant 的 Win32 Standard application 模板,写一个类名,例如“myclass”,就可以编译通过并正常运行了:
- #include
- LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);
- int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)
- {
- static TCHAR szAppName[] = TEXT ("myclass");
- HWND hwnd;
- MSG msg;
- WNDCLASSEX wndclassex = {0};
- wndclassex.cbSize = sizeof(WNDCLASSEX);
- wndclassex.style = CS_HREDRAW | CS_VREDRAW;
- wndclassex.lpfnWndProc = WndProc;
- wndclassex.cbClsExtra = 0;
- wndclassex.cbWndExtra = 0;
- wndclassex.hInstance = hInstance;
- wndclassex.hIcon = LoadIcon (NULL, IDI_APPLICATION);
- wndclassex.hCursor = LoadCursor (NULL, IDC_ARROW);
- wndclassex.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH);
- wndclassex.lpszMenuName = NULL;
- wndclassex.lpszClassName = szAppName;
- wndclassex.hIconSm = wndclassex.hIcon;
-
- if (!RegisterClassEx (&wndclassex))
- {
- MessageBox (NULL, TEXT ("RegisterClassEx failed!"), szAppName, MB_ICONERROR);
- return 0;
- }
- hwnd = CreateWindowEx (WS_EX_OVERLAPPEDWINDOW,
- szAppName,
- TEXT ("WindowTitle"),
- WS_OVERLAPPEDWINDOW,
- CW_USEDEFAULT,
- CW_USEDEFAULT,
- CW_USEDEFAULT,
- CW_USEDEFAULT,
- NULL,
- NULL,
- hInstance,
- NULL);
-
- ShowWindow (hwnd, iCmdShow);
- UpdateWindow (hwnd);
-
- while (GetMessage (&msg, NULL, 0, 0))
- {
- TranslateMessage (&msg);
- DispatchMessage (&msg);
- }
- return msg.wParam;
- }
- LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
- {
- HDC hdc;
- PAINTSTRUCT ps;
- switch (message)
- {
- case WM_CREATE:
- return (0);
-
- case WM_PAINT:
- hdc = BeginPaint (hwnd, &ps);
- TextOut (hdc, 0, 0, "A Window!", 27);
- EndPaint (hwnd, &ps);
- return (0);
-
- case WM_DESTROY:
- PostQuitMessage (0);
- return (0);
- }
- return DefWindowProc (hwnd, message, wParam, lParam);
- }
可是到了eVC4,这个框架就会出现许多编译错误,修改如下才能编译通过:
- #include
- LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);
- int WINAPI WinMain (HINSTANCE hInstance,
- HINSTANCE hPrevInstance,
- LPWSTR lpCmdLine,
- int iCmdShow)
- {
- static TCHAR szAppName[] = TEXT ("myclass");
- HWND hwnd;
- MSG msg;
- WNDCLASS wndclassex = {0};
- // wndclassex.cbSize = sizeof(WNDCLASSEX);
- wndclassex.style = CS_HREDRAW | CS_VREDRAW;
- wndclassex.lpfnWndProc = WndProc;
- wndclassex.cbClsExtra = 0;
- wndclassex.cbWndExtra = 0;
- wndclassex.hInstance = hInstance;
- wndclassex.hIcon = NULL;// LoadIcon (NULL, IDI_APPLICATION);
- wndclassex.hCursor = LoadCursor (NULL, IDC_ARROW);
- wndclassex.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH);
- wndclassex.lpszMenuName = NULL;
- wndclassex.lpszClassName = szAppName;
- // wndclassex.hIconSm = wndclassex.hIcon;
-
- if (!RegisterClass(&wndclassex))
- {
- MessageBox (NULL, TEXT ("RegisterClassEx failed!"), szAppName, MB_ICONERROR);
- return 0;
- }
- hwnd = CreateWindow(
- szAppName,
- TEXT ("WindowTitle"),
- WS_VISIBLE,
- CW_USEDEFAULT,
- CW_USEDEFAULT,
- CW_USEDEFAULT,
- CW_USEDEFAULT,
- NULL,
- NULL,
- hInstance,
- NULL);
-
- ShowWindow (hwnd, iCmdShow);
- UpdateWindow (hwnd);
-
- while (GetMessage (&msg, NULL, 0, 0))
- {
- TranslateMessage (&msg);
- DispatchMessage (&msg);
- }
- return msg.wParam;
- }
- LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
- {
- HDC hdc;
- PAINTSTRUCT ps;
- switch (message)
- {
- case WM_CREATE:
- return (0);
-
- case WM_PAINT:
- hdc = BeginPaint (hwnd, &ps);
- // TextOut (hdc, 0, 0, "A Window!", 27);
- RECT rect;
- GetClientRect (hwnd, &rect);
- DrawText (hdc, TEXT ("Hello Windows CE!"), -1, &rect,
- DT_CENTER | DT_VCENTER | DT_SINGLELINE);
- EndPaint (hwnd, &ps);
- return (0);
-
- case WM_DESTROY:
- PostQuitMessage (0);
- return (0);
- }
- return DefWindowProc (hwnd, message, wParam, lParam);
- }
其实主要是这两点不同,1. eVC下的字符只能用双字节的;2. eVC不支持Ex后缀系列API。