The Dupligroups or Collection Instance workflow in Blender are indeed a bit unorthodox, and somewhat different compared to other applications, but not any less capable, having in fact a few advantages.
The gist of it is that in Blender group definition and group usage are two separate and distinct procedures all together. This means you can't directly edit an instance of a group/collection, nor can you generally define a group directly from its constituting parts at target location.
Collection Instances or (Dupligroups for Blender pre 2.79) are a way of creating bundles of independent objects that are grouped together and can then be deployed as a single object or stored as a library for later uage. In most ways similar to AutoCAD Blocks, Sketchup Components, or 3DsMax Groups.
Unlike most other programs however, group definition and group use are completely separate in Blender, that means you define a group with a set of included objects but they aren't immediately 'converted' into an instance of that group in place, nor is a group instance directly created from them at present location.
They always remain as a separate editable "originals" you can go back to to modify, but never directly use nor actively participate in your actual scene. Think of it like a permanent Block Editor in AutoCAD, where you click Edit and a separate environment is opened to modify your block in isolation.
In much the same way an instance of that group is generally an independent object chosen specifically as duplicator that generally has no other geometric data or geometry associated with. The group/collection instance is also not editable, merely a dummy used to mirror what was defined above.
- In a work file (or even a separate 'library' file if you wish to reuse them later or in different files or across projects) you may create a new separate scene exclusively for "group definition" where you create your "group originals". In 2.8+ with the advent of Collections, you can alternatively create just a separate "master collection" (called "Instances" for example) inside which you will place all your "originals" and define your groups or components. In your particular case that would be where you would place the window frames.
Those objects can then be grouped together by moving them into individual sub-collections (one for each group or component) with the M key or by drag and frop in the outliner (use Ctrl+G for 2.7# and earlier). They can belong to several distinct groups/collections at once even (say one same window with a handle, other with hinges, and all other possible combinations) use ⇧ Shift + M to link an object to a collection, this is distinct operation from moving because at the end the object will be included in multiple groups at the same time.
Each group/collection has by default it's own origin at the scene's center (coordinate $0,0,0$) but this can be adjusted to accommodate several group definitions in the same scene while keeping their individual origins in a convenient place relative to their included objects. If you go to the Properties Window > Object Tab > Collections (Groups for pre 2.7#) you can set a different origin for each group (use the option Set Offset from Cursor for easier adjustment).
- You can also create nested groups, or groups instances inside groups if you wish to have several modular reusable components that are repeated and combined often in different ways.
Here is a hypothetical collection organizational hierarchy:
├ Scene: Windows
│└ Collection: Scene Collection
│ ├ Collection: Windows
│ │├ Collection: Window Tall
│ │├ Collection: Window 0.6m White
│ │└ Collection: Window 0.6m Wood
│ └ Collection: Doors
│ ├ Collection: Door 0.8m Left
│ ├ Collection: Door 0.8m Right
│ ├ Collection: Door 0.8m Right Handle
│ └ Collection: ...
└ Scene: Furniture
└ Collection: Scene Collection
└ Collection: Seats
├ Collection: Couches
│└ Collection: Chesterfield
├ Collection: Chairs
└ Collection: ...
Adding instances to a scene
In your actual work scene where you want to use your group instances just access the add menu Shift+A and choose your group from the last menu entry Group Instance. This will list all available instances (both local and linked) in a searchable menu.
Group instances are generally used from an Empty type of object by default, that doesn't have any mesh data or geometry of it's own. You can however force instance from any other object type by manually modifying the Dupligroup property. This is useful if you want to create a non renderable dummy geometry as helper object for snapping snapping or as visual aid. For 2.8 instancing is exclusively done from empty objects, instancing from other object types has been deprecated.
With the advent of Geometry Nodes, you can again create a setup that instances collections from any object type, including using arbitrary geometry features as isnatncing points.
Adding objects to existing groups
- Select all newly added objects you want to add to an existing group, then Shit-select an object already in the desired group at the end, making sure both remain selected, but the object already in the group remains the active one.
- Then press Ctrl + L > Groups to match the groups from active to all selected objects.
Advantages and Disadvantages
By keeping group definition and group use separate you gain some and you loose some.
You can't edit instances in place.
You can't really add an object to a group directly through it's instance, you always have to go back to the original and do it there; changes propagate automatically to all instances.
You do avoid trouble with object offsets, since they were safely preserved and well defined at source.
Editing in cluttered scenes can be made easier by separating the two actions.
Same objects can participate in any number of groups/collections saving some resources.
Creating groups with similar features or variations is made more modular and less repetitive.
Possible workarouds exist to mitigate the limitations, including several existing addons for editing Collection Instances in place and mimicking other software solutions for editing groups or "opening and closing".