Добрый день. Недавно начал изучать WIN API по учебнику 2006 года(лучше не нашел). были несоответствия, но пока все выруливал. Вот исходник программы Code: #include <windows.h> #include <windowsx.h> #include <commctrl.h> #include "resource.h" #pragma comment(lib, "comctl32.lib") LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM); BOOL OnCreate(HWND, LPCREATESTRUCT); void OnCommand(HWND,int,HWND,UINT); void OnPaint(HWND); void OnRButtonDown(HWND,BOOL,int,int,UINT); int is_red = 0; HINSTANCE hI; HBRUSH hRedBrush, hGreenBrush; MSG msg; int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrev, LPSTR lpCmdLine, int nCmdShow) { HWND hwnd; WNDCLASSEX wc; hI = hInst; memset(&wc,0,sizeof(wc)); wc.hInstance = hInst; wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); wc.hCursor = LoadCursor(NULL, IDC_ARROW); wc.hIcon = LoadIcon(NULL, IDI_HAND); wc.lpfnWndProc = WndProc; wc.lpszClassName = L"MainWindow"; wc.style = CS_HREDRAW|CS_VREDRAW; wc.lpszMenuName = MAKEINTRESOURCE(IDR_MENU1); wc.hIconSm = LoadIcon(hInst, IDI_APPLICATION); wc.cbSize = sizeof(wc); RegisterClassEx(&wc); hwnd = CreateWindow(L"MainWindow",L"Окно пользователя",WS_OVERLAPPEDWINDOW,100,100,500,300,HWND_DESKTOP,NULL,hInst,NULL); ShowWindow(hwnd,nCmdShow); UpdateWindow(hwnd); while(GetMessage(&msg,NULL,0,0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return 0; } LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { switch(msg) { case WM_DESTROY: PostQuitMessage(0); break; HANDLE_MSG(hwnd,WM_COMMAND,OnCommand); HANDLE_MSG(hwnd,WM_PAINT,OnPaint); HANDLE_MSG(hwnd,WM_RBUTTONDOWN,OnRButtonDown); HANDLE_MSG(hwnd,WM_CREATE,OnCreate); default: return DefWindowProc(hwnd, msg, wParam, lParam); } return 0; } void OnPaint(HWND hwnd) { PAINTSTRUCT ps; HDC hdc = BeginPaint(hwnd,&ps); if(is_red==1) FillRect(hdc,&ps.rcPaint,hRedBrush); else if(is_red==2) FillRect(hdc,&ps.rcPaint,hGreenBrush); EndPaint(hwnd,&ps); } void OnCommand(HWND hwnd, int id, HWND, UINT) { switch(id) { case ID_MAIN_ONE: is_red = 1; InvalidateRect(hwnd,NULL,TRUE); break; case ID_MAIN_TWO: is_red = 2; InvalidateRect(hwnd,NULL,TRUE); break; case ID_MAIN_THREE: DestroyWindow(hwnd); break; } } BOOL OnCreate(HWND hwnd, LPCREATESTRUCT) { hGreenBrush = CreateSolidBrush(RGB(100,255,100)); hRedBrush = CreateSolidBrush(RGB(255,100,100)); TBBUTTON tbb[3]; ZeroMemory(&tbb, sizeof(tbb)); for(int i=0;i<sizeof(tbb)/sizeof(TBBUTTON);i++) { switch(i) { case 0: tbb[i].idCommand = ID_MAIN_ONE; break; case 1: tbb[i].idCommand = ID_MAIN_TWO; break; case 2: tbb[i].idCommand = ID_MAIN_THREE; break; } tbb[i].fsState = TBSTATE_ENABLED; tbb[i].iBitmap = i; } CreateToolbarEx(hwnd,WS_CHILD|WS_BORDER|WS_VISIBLE,-1,3,hI,IDB_BITMAP1,tbb,3,16,16,16,16,sizeof(TBBUTTON)); return TRUE; } void OnRButtonDown(HWND hwnd,BOOL , int x, int y, UINT) { LPCWSTR str1 = L"Красный фон"; LPCWSTR str2 = L"Зеленый фон"; LPCWSTR str3 = L"Выход"; RECT rect; HMENU hTrackPopup = CreatePopupMenu(); AppendMenu(hTrackPopup,MF_STRING,ID_MAIN_ONE,str1); AppendMenu(hTrackPopup,MF_STRING,ID_MAIN_TWO,str2); AppendMenu(hTrackPopup,MF_SEPARATOR,0,NULL); AppendMenu(hTrackPopup,MF_STRING,ID_MAIN_THREE,str3); GetWindowRect(hwnd,&rect); TrackPopupMenu(hTrackPopup,TPM_LEFTALIGN|TPM_LEFTBUTTON,msg.pt.x,msg.pt.y,0,hwnd,NULL); } При запуске выскакивает окно с ошибкой: Code: Unhandled exception at 0x5d5c7f36 in Only_brains.exe: 0xC0000005: Access violation reading location 0x0092fffc. Указатель ставит на строке: Code: hwnd = CreateWindow(L"MainWindow",L"Окно пользователя",WS_OVERLAPPEDWINDOW,100,100,500,300,HWND_DESKTOP,NULL,hInst,NULL); Что посоветуете?