如何使用另一个文件中存在的WndProc内部的函数

时间:2017-09-18 11:45:41

标签: c++ winapi

所以,我在任何地方都找不到答案。假设为了我的理智,我想处理与在单独的文件中使用Win32 API创建的按钮进行交互的代码。

目前,我的WinMain文件中包含以下内容:

  LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message)
    {
    /*
    Added
    */
    //creating a windows in order to display a button
    case WM_CREATE:
        {
            button = CreateWindowA("button", "Identify Devices on Current Network",
                            WS_VISIBLE | WS_CHILD | BS_DEFPUSHBUTTON, 
                            10, 10, 300, 25, 
                            hWnd, (HMENU) ID_BTNIDCN, GetModuleHandle(NULL), NULL);
        }
        break;
    /*
    Added
    */
    case WM_COMMAND:
        {
            int wmId = LOWORD(wParam);
            // Parse the menu selections:
            switch (wmId)
            {
            /*
            Added
            */

            case ID_BTNIDCN:
                {
                    queryDevices(hWnd); //this is in another file
                    //Any action to take when button is presed
                    //In this case, creating a message box to display testing, with title test.
                    //MessageBoxA(hWnd, "Test", "Testing", MB_OK);
                }
                break;

我在查询设备文件中有这个:

#include "stdafx.h"
#include "commonheader.h"
#include "targetver.h"
#include "resource.h"

using namespace std;

//Handing the Button Press
void queryDevices(HWND hWnd)
{
    MessageBoxA(hWnd, "Test", "Testing", MB_OK);
};

我还有一个包含相关代码的公共.h文件:

#pragma once

#include "resource.h"

//Custom Files to be included
#include "customfile.cpp"

//Custom Functions
//IdentifyDevicesonCurrentNetwork.cpp
void queryDevices(HWND hWnd);

这里的想法是让你按下另一个文件中包含的按钮时执行代码,这样就可以相对容易地编辑和修改,而不会以某种方式搞砸WinMain文件。

有什么建议吗? Visual Stupid抱怨我的功能已经有了一个正文。

1 个答案:

答案 0 :(得分:2)

当编译器翻译源文件(.cpp)时,它会为您的函数体生成代码。如果现在再次在头文件中包含此文件,则在翻译头文件时将再次生成函数体的相同代码。 这实质上导致具有两个相同的功能,并且链接器不知道如何使用它们。

要解决此问题,只需从头文件中删除#include "customfile.cpp"即可。通常,永远不要在任何头文件中包含任何源文件(.cpp)。