Новичок
Профиль
Группа: Участник
Сообщений: 2
Регистрация: 18.10.2003
Репутация: нет Всего: нет
|
Написал приложение, когда выбираем Help-> About должен выскакивать Блок с описанием. Написано все на Win32 API в VisualC++6.0 Проблема в следующем. Этот ДиалогБокс создается, но с каким-то странным свойством: либо он прозрачный, или вообще не видно. Если прозрачный, то видно только кнопку OK и все. Вопрос сюда же. Если Диалог создан в редакторе ресурсов, и на нем есть статические объекты, то их надо инициализировать или они сами загрузятся как надо? Вот исходник. По-другому даже не знаю как объяснить. | Код |
#include <windows.h>
#include "resource.h"
namespace { HINSTANCE hInst; HACCEL hAccelTable; HWND hwnd; char szAppName[] = char szAppTitle[]= };
LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam); BOOL CALLBACK AboutDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);
BOOL InitApplication(HINSTANCE hInstance); BOOL InitInstance(HINSTANCE hInstance, int nWidth, int nHeight, int nCmdShow); void OnIdle(); int Run();
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { hInst = hInstance; if(!hPrevInstance) { if(!InitApplication(hInstance)) return 0; } if(!InitInstance(hInstance, 640, 480, nCmdShow) ) return 0; hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(APPLICATION) );
// InitCommonControls();
int nRet = Run(); return nRet; }
BOOL InitApplication(HINSTANCE hInstance) { WNDCLASS wc; HWND hWnd; hWnd = FindWindow(szAppName, NULL); if(hWnd) { if(IsIconic(hWnd)) ShowWindow(hWnd, SW_RESTORE); SetForegroundWindow(hWnd); return 0; }
wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); wc.hCursor = LoadCursor(NULL, IDC_ARROW); wc.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(APPLICATION)); wc.hInstance = hInstance; wc.lpfnWndProc = (WNDPROC)WndProc; wc.lpszClassName = szAppName; wc.lpszMenuName = MAKEINTRESOURCE(APPLICATION); wc.style = CS_HREDRAW | CS_VREDRAW;
if(!RegisterClass(&wc)) return 0; return 1; }
BOOL InitInstance(HINSTANCE hInstance, int nWidth, int nHeight, int nCmdShow) { HWND hWnd = CreateWindow(szAppName, szAppTitle, WS_OVERLAPPEDWINDOW, (GetSystemMetrics(SM_CXSCREEN) - nWidth)/2, (GetSystemMetrics(SM_CYSCREEN) - nHeight)/2, nWidth, nHeight, NULL, NULL, hInstance, NULL); hwnd = hWnd; if(hwnd) { ShowWindow(hwnd, nCmdShow); UpdateWindow(hwnd); return 1; } return 0; }
int Run() { MSG msg = {0}; while( msg.message != WM_QUIT) { if(PeekMessage(&msg, NULL, 0,0, PM_NOREMOVE)) { if(GetMessage(&msg, NULL, 0, 0)) { if(!TranslateAccelerator(hwnd, (HACCEL)hAccelTable, &msg )) { TranslateMessage(&msg); DispatchMessage(&msg); } } } else OnIdle(); } return msg.wParam; }
LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { HDC hdc; PAINTSTRUCT paintstruct; int wmId, wmEvent; RECT rc;
switch(uMsg) { case WM_SIZE: break; case WM_PAINT: hdc = BeginPaint(hWnd, &paintstruct); TextOut(hdc, 1,1, "Hello world!", 12); EndPaint(hWnd, &paintstruct); break; case WM_LBUTTONDOWN: hdc = GetDC(hWnd); TextOut(hdc, 10, 20, "Left button", 11); ReleaseDC(hWnd, hdc); break; case WM_RBUTTONDOWN: hdc = GetDC(hWnd); TextOut(hdc, 10, 40, "Right button", 12); ReleaseDC(hWnd, hdc); break; case WM_COMMAND: wmId = LOWORD(wParam); wmEvent = HIWORD(wParam); switch(wmId) { case IDM_EXIT: DestroyWindow(hWnd); break; case IDM_NEW: MessageBox(hWnd, "Are you sure?", "Create New File", MB_YESNO); break; case IDM_OPEN: MessageBox(hWnd, "Are you sure?", "Create Open File", MB_YESNO); break; case IDM_SAVE: MessageBox(hWnd, "Are you sure?", "Create Save File", MB_YESNO); break; case IDM_SAVEAS: MessageBox(hWnd, "Are you sure?", "Create Save as File", MB_YESNO); break; case IDM_ABOUT: DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUT), hWnd, AboutDlgProc ); return 1; //break; } break; case WM_DESTROY: PostQuitMessage(0); break; default: return CallWindowProc((WNDPROC)DefWindowProc, hWnd, uMsg, wParam, lParam ); } return 0; }
void OnIdle() {
}
BOOL CALLBACK AboutDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) { //static switch(uMsg) { case WM_COMMAND: switch(LOWORD(wParam) ) { case IDOK: ShowWindow(hDlg, SW_SHOW); SetForegroundWindow(hDlg); return 1; case IDCANCEL: EndDialog(hDlg, 0); return 1; break; } break; } return 1; }
|
|