FalseBeing 2015-06-07 15:32 采纳率: 0%
浏览 1750

想用按钮叫出对话框,可是不知在哪里出了问题,我是刚入门,各位高人帮我看看,大谢了。

#include

#define ID_START 2

LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM);
BOOL CALLBACK StartMenuProc (HWND, UINT, WPARAM, LPARAM);

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
PSTR szCmdLine, int iCmdShow)
{
static TCHAR szAppName[] = TEXT ("WBD");
MSG msg;
HWND hwnd;
WNDCLASS wndclass;

wndclass.style = CS_HREDRAW | CS_VREDRAW;
wndclass.lpfnWndProc = WndProc;
wndclass.cbClsExtra = 10;
wndclass.cbWndExtra = 20;
wndclass.hbrBackground = (HBRUSH)GetStockObject (WHITE_BRUSH);
wndclass.hInstance = hInstance;
wndclass.hIcon = LoadIcon (NULL, szAppName);
wndclass.hCursor = LoadCursor (NULL, IDC_ARROW);
wndclass.lpszMenuName = NULL;
wndclass.lpszClassName = szAppName;


if (!RegisterClass (&wndclass))
{
    MessageBox (NULL, TEXT ("Need NT"), szAppName, MB_ICONERROR);

    return 0;
}

hwnd = CreateWindow (szAppName, TEXT ("WBD"), WS_OVERLAPPEDWINDOW,
    CW_USEDEFAULT, CW_USEDEFAULT,
    CW_USEDEFAULT, CW_USEDEFAULT,
    NULL, NULL, hInstance, NULL);

ShowWindow (hwnd, iCmdShow);
UpdateWindow (hwnd);

while (GetMessage (&msg, NULL, 0, 0))
{
    TranslateMessage (&msg);
    DispatchMessage (&msg);

}

return msg.wParam;

}

LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
static HINSTANCE hInstance;
static HWND hwndButton;
static RECT rect;
static int cxChar, cyChar;
HDC hdc;
PAINTSTRUCT ps;
static TCHAR szStart[] = TEXT ("Start");
switch (message)
{
case WM_CREATE:
hInstance = ((LPCREATESTRUCT)lParam)->hInstance;
cxChar = LOWORD (GetDialogBaseUnits ());
cyChar = HIWORD (GetDialogBaseUnits ());

    hwndButton = CreateWindow (TEXT ("button"), szStart,
        WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
        30 * cxChar, 30 * cyChar,
        20 * cxChar, 7 * cyChar / 4,
        hwnd, (HMENU)ID_START,
        ((LPCREATESTRUCT)lParam)->hInstance, NULL);
    return 0;

case WM_SIZE:
    rect.left   = 24 * cxChar;
    rect.top    = 2 * cyChar;
    rect.right = LOWORD (lParam);
    rect.bottom = HIWORD (lParam);
    return 0;


case WM_PAINT:
    InvalidateRect (hwnd,&rect,TRUE);

    hdc = BeginPaint (hwnd, &ps);
    SelectObject (hdc, GetStockObject (SYSTEM_FIXED_FONT));
    SetBkMode (hdc, TRANSPARENT);

    EndPaint (hwnd, &ps);
    return 0;


case WM_DRAWITEM:

case WM_COMMAND:
    switch (LOWORD (wParam))
    {
    case ID_START:
        DialogBox (hInstance, TEXT ("StartMenu"), hwnd, StartMenuProc);
        break;
    }
        return 0;


case WM_DESTROY:
    PostQuitMessage (0);
    return 0;
}
return DefWindowProc (hwnd, message, wParam, lParam);

}
BOOL CALLBACK StartMenuProc (HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_INITDIALOG :
return TRUE;

case WM_COMMAND:
    switch (LOWORD (wParam))
    {
    case IDOK:
    //case IDCANCEL:
        EndDialog (hDlg, 0);
        return TRUE;
    }
    break;
}
return FALSE;

}

  • 写回答

4条回答 默认 最新

  • MSB4011 2015-06-07 15:39
    关注

    这段代码莫非是利物浦的教材?

    评论

报告相同问题?

悬赏问题

  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?