1

I'm a total n00b to c++ and am trying to make a simple form app, but run into this kind of problem:

1>proyecto.obj : error LNK2028: unresolved token (0A00001E) "extern "C" int __stdcall SetWindowRgn(struct HWND__ *,struct HRGN__ *,int)" (?SetWindowRgn@@$$J212YGHPAUHWND__@@PAUHRGN__@@H@Z) referenced in function "public: __clrcall proyecto::Form1::Form1(void)" (??0Form1@proyecto@@$$FQ$AAM@XZ)
1>proyecto.obj : error LNK2028: unresolved token (0A000021) "extern "C" struct HRGN__ * __stdcall CreateRectRgn(int,int,int,int)" (?CreateRectRgn@@$$J216YGPAUHRGN__@@HHHH@Z) referenced in function "public: __clrcall proyecto::Form1::Form1(void)" (??0Form1@proyecto@@$$FQ$AAM@XZ)
1>proyecto.obj : error LNK2019: unresolved external symbol "extern "C" int __stdcall SetWindowRgn(struct HWND__ *,struct HRGN__ *,int)" (?SetWindowRgn@@$$J212YGHPAUHWND__@@PAUHRGN__@@H@Z) referenced in function "public: __clrcall proyecto::Form1::Form1(void)" (??0Form1@proyecto@@$$FQ$AAM@XZ)
1>proyecto.obj : error LNK2019: unresolved external symbol "extern "C" struct HRGN__ * __stdcall CreateRectRgn(int,int,int,int)" (?CreateRectRgn@@$$J216YGPAUHRGN__@@HHHH@Z) referenced in function "public: __clrcall proyecto::Form1::Form1(void)" (??0Form1@proyecto@@$$FQ$AAM@XZ)

Googled for 30 minutes and couldn't understand a thing from solutions to threads about these errors. This is Form1:

#pragma once
#include <cstdlib>
#include <windows.h>

namespace proyecto {

    using namespace System;
    using namespace System::ComponentModel;
    using namespace System::Collections;
    using namespace System::Windows::Forms;
    using namespace System::Data;
    using namespace System::Drawing;

    /// <summary>
    /// Summary for Form1
    /// </summary>
    public ref class Form1 : public System::Windows::Forms::Form
    {
    public:
        Form1(void)
        {
            InitializeComponent();

            HRGN hrgn = CreateRectRgn(0, 0, 300, 256);

            HWND hwnd=(HWND)Handle.ToPointer();

            SetWindowRgn(hwnd, hrgn, true);
        }

    protected:
        /// <summary>
        /// Clean up any resources being used.
        /// </summary>
        ~Form1()
        {
            if (components)
            {
                delete components;
            }
        }

    private:
        /// <summary>
        /// Required designer variable.
        /// </summary>
        System::ComponentModel::Container ^components;

#pragma region Windows Form Designer generated code
        /// <summary>
        /// Required method for Designer support - do not modify
        /// the contents of this method with the code editor.
        /// </summary>
        void InitializeComponent(void)
        {
            this->SuspendLayout();
            // 
            // Form1
            // 
            this->AutoScaleDimensions = System::Drawing::SizeF(6, 13);
            this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
            this->ClientSize = System::Drawing::Size(284, 262);
            this->ControlBox = false;
            this->FormBorderStyle = System::Windows::Forms::FormBorderStyle::FixedToolWindow;
            this->Name = L"Form1";
            this->ShowIcon = false;
            this->Text = L"Form1";
            this->ResumeLayout(false);
        }
#pragma endregion
    };
}
user1151923
  • 1,853
  • 6
  • 28
  • 44
  • if you are noob dont try with windows (API is weird), learn the language syntax and some basic operations on cout, cin, files, threads, then some graphics (Allegro, STL) and then Qt/winApi if you have to... – noisy cat Feb 10 '12 at 20:49

1 Answers1

3

According to Microsoft's documentation for SetWindowRgn you need to link to User32.lib. This will provide the necessary hooks into User32.dll which resides within Windows.

Mark Ransom
  • 299,747
  • 42
  • 398
  • 622