|
| BN_CLICKED Fra : Poul S. Sørensen |
Dato : 14-03-05 19:48 |
|
Hej NG
Jeg har en win32 application i VC6, som jeg forsøger at kode ved hjælp af
native Windows functioner. Jeg forsøger at fange BN_CLICKED message i
MainWndProc, men hvordan ved jeg hvilken knap er der blevet trykket på? I
MSDN står der at :
"The BN_CLICKED notification message is sent when the user clicks a button.
The parent window of the button receives this notification message through
the WM_COMMAND message. "
Og jeg forsøger følgende:
LRESULT APIENTRY MainWndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM
lParam)
{
switch (message) {
case WM_COMMAND:
switch (LOWORD(wParam)) {
case BN_CLICKED :
switch (LOWORD(wParam)) {
case 0:
MessageBox(hwnd,"Button 1 Clicked", "",0);
break;
case 1:
MessageBox(hwnd,"Button 2 Clicked", "",0);
return 0;
}
return 0;
} /* end switch */
break; /* end wm_command */
Men case 0 er konsekvensen, uanset hvilken knap jeg trykker på.. Hvordan
opstiller man dette korrekt?
--
Med Venlig Hilsen
Poul S. Sørensen
| |
Bertel Brander (14-03-2005)
| Kommentar Fra : Bertel Brander |
Dato : 14-03-05 20:29 |
|
Poul S. Sørensen wrote:
> Hej NG
>
> Jeg har en win32 application i VC6, som jeg forsøger at kode ved hjælp af
> native Windows functioner. Jeg forsøger at fange BN_CLICKED message i
> MainWndProc, men hvordan ved jeg hvilken knap er der blevet trykket på? I
> MSDN står der at :
>
> "The BN_CLICKED notification message is sent when the user clicks a button.
> The parent window of the button receives this notification message through
> the WM_COMMAND message. "
>
> Og jeg forsøger følgende:
>
> LRESULT APIENTRY MainWndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM
> lParam)
> {
>
> switch (message) {
>
>
> case WM_COMMAND:
> switch (LOWORD(wParam)) {
>
> case BN_CLICKED :
> switch (LOWORD(wParam)) {
Skal det ikke være HIWORD der skal være BN_CLICKED og LOWORD
der er ID'en ?
Hvordan er knapperne oprettet?
--
Absolutely not the best homepage on the net:
http://home20.inet.tele.dk/midgaard
But it's mine - Bertel
| |
Poul S. Sørensen (14-03-2005)
| Kommentar Fra : Poul S. Sørensen |
Dato : 14-03-05 20:44 |
|
> Hvordan er knapperne oprettet?
\**************************************************************************/
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow)
HWND hwnd;
static HWND hwndButton;
static HWND hwndButton2;
// ... vinduet oprettes her:
hwnd = CreateWindow( ... osv.
// og her - knapperne:
hwndButton = CreateWindow(
"BUTTON", // predefined class
"Connect", // button text
WS_VISIBLE | WS_CHILD | BS_DEFPUSHBUTTON, // styles
// Size and position values are given explicitly, because
// the CW_USEDEFAULT constant gives zero values for buttons.
10, // starting x position
10, // starting y position
100, // button width
40, // button height
hwnd, // parent window
NULL, // no menu
(HINSTANCE) GetWindowLong(hwnd, GWL_HINSTANCE),
NULL); // pointer not needed
hwndButton2 = CreateWindow(
"BUTTON", // predefined class
"Shut Down", // button text
WS_VISIBLE | WS_CHILD | BS_DEFPUSHBUTTON, // styles
// Size and position values are given explicitly, because
// the CW_USEDEFAULT constant gives zero values for buttons.
120, // starting x position
10, // starting y position
100, // button width
40, // button height
hwnd, // parent window
NULL,
(HINSTANCE) GetWindowLong(hwnd, GWL_HINSTANCE),
NULL); // pointer not needed
Jeg går ud fra at den rækkefølge som knapperne bliver oprettet i er det som
bestemmer LOWORD(wParam).
| |
Bertel Brander (14-03-2005)
| Kommentar Fra : Bertel Brander |
Dato : 14-03-05 20:50 |
|
Poul S. Sørensen wrote:
>
> hwndButton = CreateWindow(
> "BUTTON", // predefined class
> "Connect", // button text
> WS_VISIBLE | WS_CHILD | BS_DEFPUSHBUTTON, // styles
> // Size and position values are given explicitly, because
> // the CW_USEDEFAULT constant gives zero values for buttons.
> 10, // starting x position
> 10, // starting y position
> 100, // button width
> 40, // button height
> hwnd, // parent window
> NULL, // no menu
> (HINSTANCE) GetWindowLong(hwnd, GWL_HINSTANCE),
> NULL); // pointer not needed
>
NULL, // no menu
Skal erstattes med ID'en på knapperne:
(HMENU )123,
Ellers får de id 0.
--
Absolutely not the best homepage on the net:
http://home20.inet.tele.dk/midgaard
But it's mine - Bertel
| |
Poul S. Sørensen (14-03-2005)
| Kommentar Fra : Poul S. Sørensen |
Dato : 14-03-05 21:14 |
|
> NULL, // no menu
> Skal erstattes med ID'en på knapperne:
> (HMENU )123,
>
> Ellers får de id 0.
Ja ok, jeg troede ellers at HMENU er en handle til en menu.item..
Men tak for hjælpen!
Mvh.
Poul
| |
Bertel Brander (14-03-2005)
| Kommentar Fra : Bertel Brander |
Dato : 14-03-05 21:33 |
|
Poul S. Sørensen wrote:
>> NULL, // no menu
>>Skal erstattes med ID'en på knapperne:
>> (HMENU )123,
>>
>>Ellers får de id 0.
>
>
> Ja ok, jeg troede ellers at HMENU er en handle til en menu.item..
> Men tak for hjælpen!
>
Om HMENU parametren skriver MSDN:
"[in] Handle to a menu, or specifies a child-window identifier depending
on the window style. For an overlapped or pop-up window, hMenu
identifies the menu to be used with the window; it can be NULL if the
class menu is to be used. For a child window, hMenu specifies the
child-window identifier, an integer value used by a dialog box control
to notify its parent about events. The application determines the
child-window identifier; it must be unique for all child windows with
the same parent window."
Et godt eksempel på at parametre i mange funktions kald bliver
brugt til noget andet end det man lige tror i windows porgrammering.
--
Absolutely not the best homepage on the net:
http://home20.inet.tele.dk/midgaard
But it's mine - Bertel
| |
|
|