所以,我在任何地方都找不到答案。假设为了我的理智,我想处理与在单独的文件中使用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抱怨我的功能已经有了一个正文。
答案 0 :(得分:2)
当编译器翻译源文件(.cpp
)时,它会为您的函数体生成代码。如果现在再次在头文件中包含此文件,则在翻译头文件时将再次生成函数体的相同代码。
这实质上导致具有两个相同的功能,并且链接器不知道如何使用它们。
要解决此问题,只需从头文件中删除#include "customfile.cpp"
即可。通常,永远不要在任何头文件中包含任何源文件(.cpp
)。