Вот код:
Код: Выделить всё
#include <windows.h>
#define ID_BUTTON1 1001
#define ID_BUTTON2 1002
#define ID_LISTBOX1 1003
#define ID_LISTBOX2 1004
BOOL RegClass(WNDPROC,LPCTSTR,UINT);
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
HINSTANCE hInstance;
char szClassName[]="Class1";
int WINAPI WinMain(HINSTANCE hInst,HINSTANCE hPrevInstance,LPSTR lpszCmdLine,int nCmdShow)
{
MSG msg; HWND hwnd; hInstance=hInst;
if(!RegClass(WndProc,szClassName,COLOR_WINDOW))
return FALSE;
hwnd=CreateWindow(szClassName,"Laboratory_Work_#14",
WS_OVERLAPPEDWINDOW|WS_VISIBLE,340,252,600,300,
0,0,hInstance,NULL);
if(!hwnd) return FALSE;
while(GetMessage(&msg,0,0,0)) DispatchMessage(&msg);
return msg.wParam;
}
BOOL RegClass(WNDPROC Proc,LPCTSTR szName, UINT brBakcground)
{
WNDCLASS wc; wc.style=wc.cbClsExtra=wc.cbWndExtra=0;
wc.lpfnWndProc=Proc; wc.hInstance=hInstance;
wc.hIcon=LoadIcon(NULL,IDI_APPLICATION);
wc.hCursor=LoadCursor(NULL,IDC_ARROW);
wc.hbrBackground=(HBRUSH)(GetStockObject(WHITE_BRUSH));
wc.lpszMenuName=(LPCTSTR)NULL;
wc.lpszClassName=szName;
return (RegisterClass(&wc)!=0);
}
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
static HWND hButton1,hButton2,hListBox1,hListBox2; RECT Rect;
char Buf1[]="Russia",Buf2[]="Ukraine",Buf3[]="U.S.A",Buf4[]="France",Buf5[]="Germany",
Buf6[]="Moscow",Buf7[]="Kiev",Buf8[]="Washington",Buf9[]="Paris",Buf10[]="Berlin",Buf[10];
int ListItem1=NULL,ListItem2=NULL;
switch(msg)
{
case WM_CREATE:
{
GetClientRect(hwnd,&Rect);
hListBox1=CreateWindow("listbox",NULL,WS_CHILD|WS_VISIBLE|LBS_STANDARD,
Rect.left+50,Rect.top+50,200,150,hwnd,(HMENU)ID_LISTBOX1,hInstance,NULL);
SendMessage(hListBox1,LB_ADDSTRING,0,(LPARAM)Buf1);
SendMessage(hListBox1,LB_ADDSTRING,0,(LPARAM)Buf2);
SendMessage(hListBox1,LB_ADDSTRING,0,(LPARAM)Buf3);
SendMessage(hListBox1,LB_ADDSTRING,0,(LPARAM)Buf4);
SendMessage(hListBox1,LB_ADDSTRING,0,(LPARAM)Buf5);
hListBox2=CreateWindow("listbox",NULL,WS_CHILD|WS_VISIBLE|LBS_STANDARD,
Rect.left+350,Rect.top+50,200,150,hwnd,(HMENU)ID_LISTBOX2,hInstance,NULL);
SendMessage(hListBox2,LB_ADDSTRING,0,(LPARAM)Buf6);
SendMessage(hListBox2,LB_ADDSTRING,0,(LPARAM)Buf7);
SendMessage(hListBox2,LB_ADDSTRING,0,(LPARAM)Buf8);
SendMessage(hListBox2,LB_ADDSTRING,0,(LPARAM)Buf9);
SendMessage(hListBox2,LB_ADDSTRING,0,(LPARAM)Buf10);
hButton1=CreateWindow("button",">>",
WS_CHILD|WS_VISIBLE|BS_DEFPUSHBUTTON,
Rect.left+50,Rect.top+205,200,50,hwnd,(HMENU)ID_BUTTON1,hInstance,NULL);
hButton2=CreateWindow("button","<<",
WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,Rect.top+350,Rect.top+205,200,50,hwnd,
(HMENU)ID_BUTTON2,hInstance,NULL);
return 0;
}
case WM_COMMAND:
{
switch(LOWORD(wParam))
{
case ID_LISTBOX1:
{
if(HIWORD(wParam)==LBN_DBLCLK)
{
ListItem1=(int)SendMessage(hListBox1,LB_GETCURSEL,0,0);
if(ListItem1!=LB_ERR)
SendMessage(hListBox1,LB_GETTEXT,ListItem1,(LPARAM)Buf);
MessageBox(hwnd,Buf,"ListBox1",MB_OK);
return 0;
}
}
case ID_LISTBOX2:
{
if(HIWORD(wParam)==LBN_DBLCLK)
{
ListItem1=(int)SendMessage (hListBox2,LB_GETCURSEL,0,0);
if(ListItem1!=LB_ERR)
SendMessage(hListBox2,LB_GETTEXT,ListItem1,(LPARAM)Buf);
MessageBox(hwnd,Buf,"ListBox2",MB_OK);
return 0;
}
}
case ID_BUTTON1:
{
MessageBox(hwnd,"Button >> is pressed","Button >>",MB_OK);
return 0;
}
case ID_BUTTON2:
{
MessageBox(hwnd,"Button << is pressed","Button <<",MB_OK);
return 0;
}
}
return 0;
}
case WM_DESTROY:{PostQuitMessage(0); return 0;}
}
return DefWindowProc(hwnd,msg,wParam,lParam);
}
ListItem1,ListItem2 переменные хранящие номер выделеной строки соответствено первого и второго списков.
При запуске все создаетса, списки заполняютса...
Но 1) Почему списки запалняютса хаотично, а не в том порядке в котором я заношу туда названия.Тобиш по идее должно ити Russia-Ukraine-USA-France-Paris-Germany а выходит USA-France-Russia-Germany-Ukraine/
2) При двойном клике на строке спика№1 или строке списка№2 должно выскочить окно с текстом в строке, а выскакует два окна с надписью "Button >> is pressed"(((
Тобиш вместо того шоб обрабатывать сообения от списков обрабатываетса кнопка ">>". помогите плиз.