Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/146.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 向win32 API添加组合框_C++_Api_Winapi_Combobox - Fatal编程技术网

C++ 向win32 API添加组合框

C++ 向win32 API添加组合框,c++,api,winapi,combobox,C++,Api,Winapi,Combobox,好的,首先这是家庭作业,但我们的老师鼓励我们超越他实际给我们的作业。。所以我想学习如何添加常用对话框。我选择了组合框 问题是。。我完全不知道从哪里开始。我已经用谷歌搜索了它,在没有帮助的情况下浏览了第一页半,所以我在这里发布:)。任务是做一些简单的事情,比如显示我的名字和画一些省略号,现在我想添加一个组合框 这是我的密码 /*------------------------------------------------------------------------ Name: Jesse M

好的,首先这是家庭作业,但我们的老师鼓励我们超越他实际给我们的作业。。所以我想学习如何添加常用对话框。我选择了组合框

问题是。。我完全不知道从哪里开始。我已经用谷歌搜索了它,在没有帮助的情况下浏览了第一页半,所以我在这里发布:)。任务是做一些简单的事情,比如显示我的名字和画一些省略号,现在我想添加一个组合框

这是我的密码

/*------------------------------------------------------------------------
Name: Jesse Moreland
Class: CST 238 GUI
Lab 2
---------------------------------------------------------------------------*/

#include <windows.h>
#include <WinUser.h>
#include <string>

using std::string;

LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
                    PSTR lpszCmdParam, int nCmdShow)
     {
     static char szAppName[] = "ErrorSample";
     HWND           hwnd;
     HWND           comboBox;
     MSG            msg;    // Look how this struct is defined-see help/class notes NOW
     WNDCLASSEX     wndclass; 

          wndclass.cbSize        = sizeof(wndclass);
          wndclass.style         = CS_HREDRAW | CS_VREDRAW;
          wndclass.lpfnWndProc   = WndProc;
          wndclass.cbClsExtra    = 0;
          wndclass.cbWndExtra    = 0;
          wndclass.hInstance     = hInstance;
          wndclass.hIcon         = LoadIcon (NULL, IDI_APPLICATION);

          wndclass.hCursor       = LoadCursor (NULL, IDC_ARROW);
          wndclass.hbrBackground = static_cast<HBRUSH>(GetStockObject (WHITE_BRUSH));
          wndclass.lpszMenuName  = NULL;
          wndclass.lpszClassName = szAppName;
          wndclass.hIconSm       = LoadIcon(NULL, MAKEINTRESOURCE(IDI_ERROR));

          RegisterClassEx (&wndclass);

//        PlaySound("C:\\Windows\\winsxs\\x86_microsoft-windows-speech-userexperience_31bf3856ad364e35_6.1.7601.17514_none_1e1159f6aa0eb8c7\\Speech Off.wav",NULL, SND_FILENAME);

     hwnd = CreateWindow (szAppName,         // window class name
            "Jesse Moreland LAB 2 - Press Left or Right Mouse Button",           // window caption
                    WS_OVERLAPPEDWINDOW,     // window style
                    CW_USEDEFAULT,           // initial x position
                    CW_USEDEFAULT,           // initial y position
                    CW_USEDEFAULT,           // initial x size
                    CW_USEDEFAULT,           // initial y size
                    NULL,                    // parent window handle
                    NULL,                    // window menu handle
                    hInstance,               // program instance handle
                    NULL);                   // creation parameters

     ShowWindow (hwnd, nCmdShow);

     UpdateWindow (hwnd);

     while (GetMessage (&msg, NULL, 0, 0))
          {
          TranslateMessage (&msg);
          DispatchMessage (&msg);
          }
     return (int) msg.wParam;
     }

LRESULT CALLBACK WndProc (HWND hwnd, UINT message, 
                          WPARAM wParam, LPARAM lParam)
     {
     HDC  hdc;
     PAINTSTRUCT ps;
     RECT        rect;
     RECT        size;

     char * summer = "SUMMER IS COMING SOON!";
     char * leftOrRight = "Press Left or Right Mouse Button to make selection";

     switch (message)
         {

          case WM_PAINT:
                hdc = BeginPaint (hwnd, &ps);

                GetClientRect (hwnd, &rect);

                GetWindowRect(hwnd, &size);

                HPEN hPenOld;

                //Draw ellipse
                HPEN hEllipsePen;
                COLORREF qEllipseColor;

                qEllipseColor = RGB(0, 0, 255);
                hEllipsePen = CreatePen(PS_SOLID, 3, qEllipseColor);
                hPenOld =(HPEN)SelectObject(hdc, hEllipsePen);

                Arc(hdc, 40, 40, 160, 80, 0, 0, 0, 0);
                Arc(hdc, 50, 50, 180, 60, 0, 0, 0, 0);

                SelectObject(hdc, hPenOld);
                DeleteObject(hEllipsePen);

                TextOut(hdc, 0, 0, summer, strlen(summer));
                TextOut(hdc, 0, 20, leftOrRight, strlen(leftOrRight));



                EndPaint (hwnd, &ps);
                return 0;

          case WM_LBUTTONDOWN:
              return 0;

          case WM_RBUTTONDOWN:
              return 0;

          case WM_DESTROY:
              PostQuitMessage(0);
              return 0;

         }

     return DefWindowProc (hwnd, message, wParam, lParam);
     }
/*------------------------------------------------------------------------
姓名:杰西·莫兰
类别:CST 238 GUI
实验2
---------------------------------------------------------------------------*/
#包括
#包括
#包括
使用std::string;
LRESULT回调WndProc(HWND HWND,UINT消息,WPARAM WPARAM,LPARAM LPARAM);
int WINAPI WinMain(HINSTANCE HINSTANCE、HINSTANCE HPPreInstance、,
PSTR lpszCmdParam,int nCmdShow)
{
静态字符szAppName[]=“ErrorSample”;
HWND-HWND;
HWND组合框;
MSG;//看看这个结构是如何定义的,现在看帮助/类注释
wndclass x wndclass;
wndclass.cbSize=sizeof(wndclass);
wndclass.style=CS_HREDRAW | CS_VREDRAW;
wndclass.lpfnWndProc=WndProc;
wndclass.cbClsExtra=0;
wndclass.cbWndExtra=0;
wndclass.hInstance=hInstance;
wndclass.hIcon=LoadIcon(空,IDI_应用程序);
wndclass.hCursor=LoadCursor(空,IDC_箭头);
wndclass.hbrBackground=静态施法(GetStockObject(白色笔刷));
wndclass.lpszMenuName=NULL;
wndclass.lpszClassName=szAppName;
wndclass.hIconSm=LoadIcon(NULL,MAKEINTRESOURCE(IDI_错误));
RegisterClassEx(&wndclass);
//播放声音(“C:\\Windows\\winsxs\\x86\U microsoft-Windows-speech-userexperience\U 31bf3856ad364e35\U 6.1.7601.17514\U none\U 1e1159f6aa0eb8c7\\speech Off.wav”,空,SND\U文件名);
hwnd=CreateWindow(szAppName,//窗口类名称
“Jesse Moreland实验室2-按鼠标左键或右键”//窗口标题
WS\u重叠窗口,//窗口样式
CW_USEDEFAULT,//初始x位置
CW\U USEFAULT,//初始y位置
CW\u usefault,//初始x大小
CW\u usefault,//初始y大小
NULL,//父窗口句柄
NULL,//窗口菜单句柄
hInstance,//程序实例句柄
NULL);//创建参数
显示窗口(hwnd、nCmdShow);
更新窗口(hwnd);
while(GetMessage(&msg,NULL,0,0))
{
翻译信息(&msg);
发送消息(&msg);
}
返回(int)msg.wParam;
}
LRESULT回调WndProc(HWND HWND,UINT消息,
WPARAM WPARAM,LPARAM LPARAM)
{
HDC-HDC;
PAINTSTRUCT-ps;
RECT-RECT;
直肠大小;
char*summer=“夏天快到了!”;
char*leftOrRight=“按鼠标左键或右键进行选择”;
开关(信息)
{
案例WM_油漆:
hdc=开始喷漆(hwnd和ps);
GetClientRect(hwnd和rect);
GetWindowRect(hwnd和大小);
HPEN-hPenOld;
//画椭圆
赫本·赫利普斯彭;
COLORREF qEllipseColor;
qEllipseColor=RGB(0,0255);
hEllipsePen=CreatePen(PS_SOLID,3,qEllipseColor);
hPenOld=(HPEN)SelectObject(hdc,hEllipsePen);
电弧(hdc,40,40,160,80,0,0,0,0,0);
弧(hdc,50,50,180,60,0,0,0,0,0);
选择对象(hdc、hPenOld);
DeleteObject(hEllipsePen);
TextOut(hdc,0,0,summer,strlen(summer));
文本输出(hdc,0,20,leftOrRight,strlen(leftOrRight));
端漆(hwnd和ps);
返回0;
案例WM_LBUTTONDOWN:
返回0;
案例WM_RBUTTONDOWN:
返回0;
案例WM_销毁:
PostQuitMessage(0);
返回0;
}
返回DefWindowProc(hwnd、message、wParam、lParam);
}

我应该把制作组合框的命令放在哪里?

有一条叫做
WM\u CREATE
的特殊消息,它在第一次创建窗口时被调用。您可以将代码放在那里,以便在启动时创建组合框

关于
WM\u创建

当应用程序通过调用CreateWindowEx或CreateWindow函数请求创建窗口时发送。(该消息在函数返回之前发送。)新窗口的窗口过程在创建窗口后,但在窗口变为可见之前接收该消息

switch(message){

...

case WM_CREATE: {
//create combobox

return 0;
}
}
请参阅以获取参考

编辑

首先,您需要了解Windows中的每个控件都是一个“窗口”,因此您将使用
CreateWindow()
like创建一个组合框

HWND hCombobox = CreateWindow(L"COMBOBOX", ...);

请参阅-function.

为WM\u创建一个处理程序,如

CASE WM_CREATE:
    CreateWindowEx(WS_EX_STATICEDGE, "COMBOBOX", "MyCombo1", 
            CBS_DROPDOWN | WS_CHILD | WS_VISIBLE, 
            0, 0, 50, 20, hwnd, 100, hInstance, NULL); // 100 = ID of this control
    CreateWindowEx(WS_EX_STATICEDGE, "COMBOBOX", "MyCombo2", 
            CBS_DROPDOWN | WS_CHILD | WS_VISIBLE, 
            100, 100, 50, 20, hwnd, 101, hInstance, NULL); // 101 = ID of this control
    return 0;
您可以使用以下命令在dlgproc中的其他位置检索窗口句柄:

hEditCombo1 = GetDlgItem(hwnd, 100);

我明白,但我不知道如何创建一个?谢谢。在你的帮助下我找到了答案!!:)。这显示了如何向ComboBox发送消息以及如何从ComboBox接收通知如果您要为一个程序生成多个句柄,您可能希望开始使用#定义术语(例如#定义IDC#MY#COMBO 100)而不是原始数字。。。