【问题标题】:Running event by clicking button c++通过单击按钮 c++ 运行事件
【发布时间】:2015-04-19 10:42:21
【问题描述】:

我试图通过单击按钮来运行简单事件,但我的代码似乎不起作用。有两个问题。首先,当我点击按钮时,我需要运行int nmr()。其次,我需要在string inFile() 中插入我通过 OpenFileDialog 选择的文件路径。这是我的代码:

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    HWND hWndButton

    switch (message)
    {
    case WM_CREATE:
        CreateMenubar(hWnd);

        hWndButton = CreateWindow("button", "Go!",WS_VISIBLE|WS_CHILD,15,45,60,25,hWnd,
            (HMENU) ID_BUTTON,NULL,NULL);

        break;

    case WM_COMMAND:
        switch (LOWORD(wParam))
        {
        case IDM_FILE_OPEN:
            openFileDialog1;
            if (openFileDialog1->ShowDialog())
            {
                MessageBox(0, openFileDialog1->FileName, _T("File name"),
                    MB_OK | MB_ICONINFORMATION);
            }
            openFileDialog1->FilterIndex = 1;
            openFileDialog1->Flags |= OFN_SHOWHELP;
            openFileDialog1->InitialDir = _T("C:\\Windows\\");
            openFileDialog1->Title = _T("Open Text File");

            break;

        case ID_BUTTON:

            int nmr();

            break;

        case IDM_FILE_QUIT:
            SendMessage(hWnd, WM_CLOSE, 0, 0);
            break;
        }
        break;

    case WM_DESTROY:
    {
        PostQuitMessage(0);
        return 0;
    }
        break;
        }

return DefWindowProc(hWnd, message, wParam, lParam);
}

void CreateMenubar(HWND hwnd)
{
HMENU hMenubar;
HMENU hMenu;

hMenubar = CreateMenu();
hMenu = CreateMenu();

AppendMenuW(hMenu, MF_STRING, IDM_FILE_OPEN, L"&Open");
AppendMenuW(hMenu, MF_SEPARATOR, 0, NULL);
AppendMenuW(hMenu, MF_STRING, IDM_FILE_QUIT, L"&Quit");

AppendMenuW(hMenubar, MF_POPUP, (UINT_PTR)hMenu, L"&File");
    SetMenu(hwnd, hMenubar);
}



OpenFileDialog::OpenFileDialog(void)
    {
        this->DefaultExtension = 0;
        this->FileName = new TCHAR[MAX_PATH];
        this->Filter = 0;
        this->FilterIndex = 0;
        this->Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;
        this->InitialDir = 0;
        this->Owner = 0;
        this->Title = 0;
    }

    bool OpenFileDialog::ShowDialog()
    {
        OPENFILENAME ofn;

    ZeroMemory(&ofn, sizeof(ofn));

    ofn.lStructSize = sizeof(ofn);
    ofn.hwndOwner = this->Owner;
    ofn.lpstrDefExt = this->DefaultExtension;
    ofn.lpstrFile = this->FileName;
    ofn.lpstrFile[0] = '\0';
    ofn.nMaxFile = MAX_PATH;
    ofn.lpstrFilter = this->Filter;
    ofn.nFilterIndex = this->FilterIndex;
    ofn.lpstrInitialDir = this->InitialDir;
    ofn.lpstrTitle = this->Title;
    ofn.Flags = this->Flags;

    GetOpenFileName(&ofn);

    if (_tcslen(this->FileName) == 0) return false;


    return true;
}


int nmr()
{
    string inFile(openFileDialog1->FileName);
    string outFile("C:\\Users\\admin\\Desktop\\outT1.txt");

    int numline = 0;
    double v1;
    string s;
    string v2, v3, v4;
    string line_keep, line_avoid;
    ifstream in_stream;
    ofstream out_stream;
    in_stream.open(inFile.c_str());
    out_stream.open(outFile.c_str());
    if (in_stream.fail() || out_stream.fail())
    {
        cout << "Error ocured during oppening file!" << endl;
        return 1;
    }

任何建议将不胜感激。

【问题讨论】:

  • 代码格式很糟糕。 int nmr(); 也必须是 nmr();
  • 您的编辑完全改变了问题。我把它回滚了。
  • @Vinzenz 我认为有些东西正在吞噬他在函数体中最左边的四个空间;至少看起来是这样的

标签: c++ winapi events button click


【解决方案1】:
int nmr();

声明一个名为nmr 的函数。那不是你想要的。您想调用您在别处定义的同名函数。你的意思是写,简单地说:

int retval = nmr();

调用函数。

如果您不关心返回值,您可以简单地这样做:

nmr();

您需要在调用上方定义函数nmr,或使用前向声明。

将文件名作为参数传递给nmr() 会更有意义。

int nmr(const string& inFileName)

使用int 返回值来表示成功在 C++ 中远非惯用语。如果必须使用返回值来表示成功,那么bool 会更合适。 C 的较旧变体没有布尔类型,这可能是您学习返回 int 以表示成功的概念的地方。但是在编写新代码时,是时候忘记这个概念了。与现有代码交互时,您仍然需要了解它。

【讨论】:

  • @Angew 谢谢。已更正。
  • 我做了一个前向声明int nmr(const string&amp; inFileName),编辑LRESULTint nmr(const string&amp; inFileName)。它仍然不起作用。我只需要使用int nmr() 函数选择文件并通过点击按钮进行编辑。
  • 我想我回答了你问的问题。我无法调试你看不到的新代码。
猜你喜欢
  • 2010-10-25
  • 1970-01-01
  • 1970-01-01
  • 2016-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-27
  • 1970-01-01
相关资源
最近更新 更多