gpt4 book ai didi

winapi - C++ Win32,如何向 Win32 对话框添加下拉菜单

转载 作者:行者123 更新时间:2023-12-04 20:21:25 26 4
gpt4 key购买 nike

C++ Win32,如何向 Win32 对话框添加下拉菜单

你好,

这是我第一次向 stackoverflow 发布问题。

我正在尝试将组合框(在 menu.cpp 中)添加到 Win32 对话框(在fingerspell.cpp 中)。我对 Win32 不是很流利
编程和大多数 msdn 示例片段在窗口内绘制一个组合框。尽管 Dialogbox 在技术上是
一个窗口,但我在修改任何窗口示例代码以处理 DialogBox 方面没有取得太大进展。我真的很感激一个有效的例子。

代码的粗略草图如下。 fingerspell.cpp 创建实现 WinMain 函数然后调用
在此 DialogBox 中绘制的其他自定义类。不使用其他窗口控件,如按钮、文本区域等。

Fingerspell.cpp 的代码是

#include "fingerspell.h"
extern "C" __declspec(dllexport)bool isGloveDriverInstalled();
extern "C" __declspec(dllimport)bool initialize();

#define RUN( x ) if ( SUCCEEDED( result ) ) { result = x; }

BOOL g_fullscreen = FALSE;
bool portReady;

INT_PTR CALLBACK OptionDialogProc( HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch (uMsg) {
case WM_INITDIALOG:
if (wParam == IDOK)
return TRUE ;
else
return FALSE ;
break;

case WM_COMMAND:
if (HIWORD(wParam) == BN_CLICKED) {
if (LOWORD(wParam) == IDOK) {
g_fullscreen = TRUE;
EndDialog (hwndDlg, 1) ;
}
else if (LOWORD(wParam) == ID_WINDOW_OPT) {
g_fullscreen = FALSE;
EndDialog (hwndDlg, 1) ;
}
else {
EndDialog (hwndDlg, 0) ;
}

return TRUE ;
}

default:
return FALSE;
break ;
}
}


int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
INT_PTR DispOption = DialogBox (hInstance, MAKEINTRESOURCE(IDD_DISPLAY_OPTIONS), NULL, OptionDialogProc) ;
if (DispOption == 0)
return 0 ;

//srand( GetTickCount( ) );

HRESULT result = S_OK;

if (!isGloveDriverInstalled())
{
portReady = FALSE;
MessageBox(NULL, "The Glove Driver is not istalled ", "Error", MB_OK );
}
else
{
if (!initialize())
{
portReady = FALSE;
MessageBox(NULL, "Error Opening Com Port", "Error", MB_OK );
}
else
{
portReady = TRUE;
}
}

RUN( Words ::Create ( "default.txt" ) );
RUN( Window::Create ( ) );
RUN( Render::Create ( ) );
RUN( Art ::Create ( ) );
RUN( Menu ::Create ( ) );
RUN( Window::MessageLoop( ) );
RUN( Menu ::Destroy ( ) );
RUN( Art ::Destroy ( ) );
RUN( Render::Destroy ( ) );
RUN( Window::Destroy ( ) );
RUN( Words ::Destroy ( ) );

if ( FAILED( result ) )
{
MessageBox( GetDesktopWindow( ), "Warning - Fail Code Detected", "Fingerspell 2002", MB_ICONWARNING | MB_OK );
}

return result;
}

menu.cpp 的代码。我试图添加组合框的文件。
#include "fingerspell.h"

#include <windows.h> //include all the basics
#include <tchar.h> //string and other mapping macros
#include <string>

HRESULT Menu::Create( )
{
// set menu as the background
Render::SetBackground( ART_MENU );
// clear overlay
Render::Reset( );
Window::SetProc( Proc );
return S_OK;
}

HRESULT Menu::Destroy( void )
{
return S_OK;
}

LRESULT CALLBACK Menu::Proc( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam )
{
DWORD i ;

const static RECT button_rect[ 8 ] =
{
{ 52, 139, 52 + 101, 139 + 50 }, //1. about
{ 55, 212, 55 + 85, 212 + 50 }, // 2. learn
{ 67, 280, 67 + 63, 280 + 50 }, // 3. exit
{ 397, 137, 397+ 233, 137 + 50 }, // 4. Add Delete List.
{ 421, 187, 421+ 183, 187 + 50 }, // 5. add word
{ 413, 247, 413+ 201, 247 + 50 }, // 6. delete word
{ 450, 300, 450+ 124, 300 + 50 }, // 7. practice
{ 473, 349, 473 + 82, 349 + 50 }, // 8. test



};

// custom message processing

switch ( uMsg )
{
case WM_CREATE:
return OnCreate(hwnd,reinterpret_cast<CREATESTRUCT*>(lParam));



case WM_MOUSEMOVE: // move is moved, see where is it pointing to.
{
int xPos = GET_X_LPARAM( lParam );
int yPos = GET_Y_LPARAM( lParam );

for ( i = 0; i < 8; i++ )
{
if ( xPos >= button_rect[ i ].left && yPos >= button_rect[ i ].top )
{
if ( xPos < button_rect[ i ].right && yPos < button_rect[ i ].bottom )
{
// set selection

Render::SetOverlay( 0, (ART) ( ART_MENU_LEARN + i ), button_rect[ i ].left, button_rect[ i ].top );

break;
}
}
}

if ( i == 8 )
{
//remove selection

Render::SetOverlay( 0, ART_NULL, 0, 0 );
}

return 0;
}

case WM_LBUTTONDOWN:
{
switch ( Render::GetOverlay( 0 ) )
{
case ART_MENU_EXIT: // done.
{
Menu::Destroy( );

Learn::Create( );

break;
}

case ART_MENU_LEARN: // done
{
Menu::Destroy( );

About::Create( );

break;
}


case ART_MENU_ABOUT: // done
{
Menu::Destroy( );

Test::Create( );

break;
}

case ART_MENU_TEST: // done.
{
Menu::Destroy( );

Practice::Create( );

break;
}


case ART_MENU_DELETEWORD: // done
{
Menu::Destroy( );

AddWord::Create( );

break;
}

case ART_MENU_ADDDELETELIST:
{
//Menu::Destroy () ;

PostQuitMessage( 0 );

break;
}

case ART_MENU_ADD:
{
Menu::Destroy( );

// About is place holder. should be AddDELETELIST
About::Create( );

break;
}

case ART_MENU_PRACTICE: // done.
{
Menu::Destroy( );

// About is place holder. shd be DELETEWORD.
About::Create( );

break;
}




}

return 0;


}



}

// default message processing

return DefWindowProc( hwnd, uMsg, wParam, lParam );
}

谢谢。

最佳答案

http://www.resedit.net/

我认为它比视觉工作室编辑器更好(只有专业版才有)

关于winapi - C++ Win32,如何向 Win32 对话框添加下拉菜单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6130727/

26 4 0