Use TrackPopupMenu() for the popup.....manipulate WM_INITDIALOG for the focus.....ala;
::for msvc++6, but you can edit the resource script and header to get rid of any non crucial stuff::
Code:
#include <windows.h>
#include "resource.h"
BOOL CALLBACK DialogProc2(HWND hwndDlg,UINT uMsg,WPARAM wParam,
LPARAM lParam){
HWND hEdit;
switch(uMsg){
case WM_INITDIALOG:
hEdit = GetDlgItem(hwndDlg,IDC_EDIT2);//get handle of 2nd edit
SetFocus(hEdit);//set its focus
return 0;//return 0 to overide system setting default focus
case WM_CLOSE:
EndDialog(hwndDlg,0);
return 1;
}
return 0;
}
BOOL CALLBACK DialogProc(HWND hwndDlg,UINT uMsg,WPARAM wParam,
LPARAM lParam){
static HMENU hMenu;
POINT point;
switch(uMsg){
case WM_INITDIALOG:
hMenu = LoadMenu(GetModuleHandle(NULL),//Load Menu
MAKEINTRESOURCE(IDR_MENU1));
hMenu = GetSubMenu(hMenu,0);//Get Sub Menu
return 1;
case WM_RBUTTONDOWN:
point.x = LOWORD(lParam);//Get cursor Pos
point.y = HIWORD(lParam);
TrackPopupMenu(hMenu,TPM_LEFTALIGN | TPM_RIGHTBUTTON,
point.x,point.y,NULL,hwndDlg,NULL);//Create popup
return 1;
case WM_CLOSE:
DestroyMenu(hMenu);
EndDialog(hwndDlg,0);
return 1;
case WM_COMMAND:
if(LOWORD(wParam == WM_POPUPCLICKED)){
MessageBox(hwndDlg,"ClickMe!!",NULL,MB_OK);//was popup clicked
return 1;
}
else if(LOWORD(wParam == IDOK)){
DialogBoxParam(GetModuleHandle(NULL),MAKEINTRESOURCE(IDD_DIALOG2),
hwndDlg,DialogProc2,NULL);//Launch 2nd dialog
return 1;
}
}
return 0;
}
int WINAPI WinMain(HINSTANCE hInst,HINSTANCE,LPSTR,int){
DialogBoxParam(hInst,MAKEINTRESOURCE(IDD_DIALOG1),
HWND_DESKTOP,DialogProc,NULL);
return 0;
}
Now resource.h
Code:
//{{NO_DEPENDENCIES}}
// Microsoft Developer Studio generated include file.
// Used by Script1.rc
//
#define IDD_DIALOG1 101
#define IDR_MENU1 102
#define IDD_DIALOG2 103
#define IDC_EDIT1 1000
#define IDC_BUTTON1 1001
#define IDC_EDIT2 1002
#define WM_POPUPCLICKED 40002
#define IDC_STATIC -1
// Next default values for new objects
//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 104
#define _APS_NEXT_COMMAND_VALUE 40003
#define _APS_NEXT_CONTROL_VALUE 1003
#define _APS_NEXT_SYMED_VALUE 101
#endif
#endif
script.rc
Code:
//Microsoft Developer Studio generated resource script.
//
#include "resource.h"
#define APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 2 resource.
//
#include "afxres.h"
/////////////////////////////////////////////////////////////////////////////
#undef APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
// English (U.K.) resources
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENG)
#ifdef _WIN32
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_UK
#pragma code_page(1252)
#endif //_WIN32
/////////////////////////////////////////////////////////////////////////////
//
// Dialog
//
IDD_DIALOG1 DIALOG DISCARDABLE 0, 0, 186, 95
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Dialog"
FONT 8, "MS Sans Serif"
BEGIN
DEFPUSHBUTTON "Run 2nd Dialog",IDOK,51,40,72,14
END
IDD_DIALOG2 DIALOG DISCARDABLE 0, 0, 186, 93
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Dialog2 - Second edit selected"
FONT 8, "MS Sans Serif"
BEGIN
EDITTEXT IDC_EDIT1,39,34,131,14,ES_AUTOHSCROLL
DEFPUSHBUTTON "Dummy Button",IDC_BUTTON1,40,7,96,16
EDITTEXT IDC_EDIT2,40,57,131,15,ES_AUTOHSCROLL
LTEXT "2nd",IDC_STATIC,14,60,18,11
LTEXT "1st",IDC_STATIC,15,36,22,11
END
/////////////////////////////////////////////////////////////////////////////
//
// DESIGNINFO
//
#ifdef APSTUDIO_INVOKED
GUIDELINES DESIGNINFO DISCARDABLE
BEGIN
IDD_DIALOG1, DIALOG
BEGIN
LEFTMARGIN, 7
RIGHTMARGIN, 179
TOPMARGIN, 7
BOTTOMMARGIN, 88
END
IDD_DIALOG2, DIALOG
BEGIN
LEFTMARGIN, 7
RIGHTMARGIN, 179
TOPMARGIN, 7
BOTTOMMARGIN, 86
END
END
#endif // APSTUDIO_INVOKED
#ifdef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// TEXTINCLUDE
//
1 TEXTINCLUDE DISCARDABLE
BEGIN
"resource.h\0"
END
2 TEXTINCLUDE DISCARDABLE
BEGIN
"#include ""afxres.h""\r\n"
"\0"
END
3 TEXTINCLUDE DISCARDABLE
BEGIN
"\r\n"
"\0"
END
#endif // APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Menu
//
IDR_MENU1 MENU DISCARDABLE
BEGIN
POPUP "DEFAULT-Not Seen"
BEGIN
MENUITEM "ClickMe", WM_POPUPCLICKED
END
END
#endif // English (U.K.) resources
/////////////////////////////////////////////////////////////////////////////
#ifndef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 3 resource.
//
/////////////////////////////////////////////////////////////////////////////
#endif // not APSTUDIO_INVOKED